【发布时间】:2023-02-06 22:21:33
【问题描述】:
我不确定为什么这段代码会打印出“5678998765”。我看到它是如何获得 56789 部分的,但是当数字开始下降时,我感到很困惑。因此,如果有人可以解释,我将不胜感激。
int out(int k) {
if (k == 10) {
return 1;
}
printf("%d", k);
out(k +1);
printf("%d", k);
}
int main()
{
out(5);
return 0;
【问题讨论】:
-
它打印每个数字两次:一次在进出的路上,一次在出出的路上。例如,当
9被打印时,out(9+1)什么都不做,下一个9被立即打印。在递归过程中,其他数字的输出被中间发生的任何事情分开。 -
了解如何使用调试器。
-
这是序列 ->
print(5) -> recursive(6) -> print(6) -> ... print(9) -> recursive(9) -> return 1 -> print(9) -> return void -> print(8) -> return void -> print(7) ->return void -> print(6) ->return void -> print(5) -> return void。在递归完成之前,不会调用第二次打印,然后开始从上到下打印。顺便说一句,虽然它有效,但您应该返回一个 int 值,因为您的函数是int类型的。虽然它可以是无效的。 -
你期待什么? “5678999999”?或者只是“56789”
-
...所以这个数字并没有“变小”。它们与第一次打印时相同,例如 5678998765.