C 我不明白这个递归

C 我不明白这个递归,c,recursion,C,Recursion,鉴于此代码: void recursion(int x) { if (x > 0) { recursion(x-1); printf("%d", x); } } 使用: recursion(5); 为什么会打印12345?我逻辑上遵循这个函数,我认为它会打印43210 编辑:很抱歉,如果你觉得这看起来非常愚蠢,但我仍在学习。当x=5时,它调用递归4;当x=4时,它调用recursion3,等等。当它最终调用recursion

鉴于此代码:

void recursion(int x) {
    if (x > 0) {
         recursion(x-1); 
         printf("%d", x); 
    }  
} 
使用:

recursion(5);
为什么会打印12345?我逻辑上遵循这个函数,我认为它会打印43210


编辑:很抱歉,如果你觉得这看起来非常愚蠢,但我仍在学习。

当x=5时,它调用递归4;当x=4时,它调用recursion3,等等。当它最终调用recursion0时,条件为false,函数不做任何操作就返回。此时,它将返回到对recursion1的调用,在该调用中,它将打印x的当前值1,然后返回到recursion2,等等。

只需按照代码所经历的步骤进行操作,然后使用调试器实时查看:

recursion(5);
if (5 > 0) recursion(4);
if (4 > 0) recursion(3);
if (3 > 0) recursion(2);
if (2 > 0) recursion(1);
if (1 > 0) recursion(0);
if (0 > 0) { // false, so if body skipped and function simply returns}
printf("%d", 1); // The next statement after the call recursion(0)
printf("%d", 2); // The next statement after the call recursion(1)
printf("%d", 3); // The next statement after the call recursion(2)
printf("%d", 4); // The next statement after the call recursion(3)
printf("%d", 5); // The next statement after the call recursion(4)

因为对递归的调用在printf之前。OP可以用铅笔和纸解决这个问题…@MitchWheat-aww请。。这需要努力。现在我明白为什么我认为它会打印43210。它不会在调用递归4后立即打印出来@walidy是的,因为递归函数调用必须在执行下一条语句之前返回。