void prikaz(int k, int n)
{
printf("%d\t",k);
if(k<n)
prikaz(k+1,n);
printf("%d\t",k);
}
prikaz(2,6);
我无法绕过这个递归循环的输出,我可以跟进,直到数字开始下降,但我不明白为什么他们下降。
答案 0 :(得分:1)
原因是因为函数的最后一行在递归调用返回/结束后打印了k
的值。这将打印 {em}之前的值,即+1
之前的值,即调用前的原始值。
但是,只有在所有递归调用完成后才会执行该部分。
基本上,当k<n
不再为真时,它将开始执行最后一次printf
调用,然后返回上一个函数调用并执行上一次printf
(其中将是k
增加之前的值,并且它将重复,直到所有先前的调用完成。
这很难解释,你只需要更仔细地介绍它。使用调试器会有很大帮助。
也许这有助于更好地解释它:
// call 1 (k = 2)
// call 1 print 2
// call 2 (k = 3)
// call 2 print 3
// call 3 (k = 4)
// call 3 print 4
// call 4 (k = 5)
// call 4 print 5
// call 5 (k = 6)
// call 5 print 6
// k<n is false, so no more recursive calls.
// call 5 print 6
// call 4 print 5
// call 3 print 4
// call 2 print 3
// call 1 print 2