2016-08-16 2 views
4
void func(int num){ 
    if(num< 3){ 
     printf("%d ", num); 
     func(num+ 1); 
     printf("%d ", num); 
    } 
} 

Предположим, что я вызываю эту функцию с помощью func (0). Почему результат 0 1 2 2 1 0? Я не знаю, почему он уменьшается.Рекурсия: не понимаю этого результата

+5

Первые три цифры приходят от первого Printf, а вторые три цифры приходят из второго Printf как стек раскручивается. Чтобы убедиться, что лучше, попробуйте '' a:% d "и' "b:% d" 'как строки формата. – user3386109

+0

Да, я понимаю, но почему это происходит от 2 до 0, для меня это не имеет смысла? –

+0

Ваш код ничего не делает, поскольку функция никогда не вызывается. –

ответ

11

Вот трассировки стека

f(0) 
    print 0 
    f(1) 
     print 1 
     f(2) 
      print 2 
      f(3) // 3 < 3 == false 
      print 2 
     print 1 
    print 0 
+0

Хорошо, так что я понимаю, почему 3 является ложным, и он печатает 2. Но почему он также печатает 1 и 0 после этого? –

+1

Когда вы вызываете функцию (B) внутри другой (A), вы не прерываете функцию (A), вы складываете ее и возвращаете к ней, как только вызываемая функция (B) заканчивается – CMPS

+0

Wow thanks, я никогда не думал об этом , Это многое прояснило. –

Смежные вопросы