递归函数降序输出

时间:2018-06-05 10:04:12

标签: c

void prikaz(int k, int n)
{
    printf("%d\t",k);

    if(k<n) 
        prikaz(k+1,n);

    printf("%d\t",k);
} 
prikaz(2,6);

我无法绕过这个递归循环的输出,我可以跟进,直到数字开始下降,但我不明白为什么他们下降。

1 个答案:

答案 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