#include<stdio.h>
void printd(int n)
{
if(n/10)
printd(n/10);
putchar(n%10+'0');
}
在上面的代码中,将 n 视为正整数 其值为123。
第一次,123被传递给printd(第一次printd) 第二次,12被传递给printd(第二次printd) 第三次,1被传递给printd(第三次printd)并且putchar打印1
那么控制流到第二个 printd 后,n 的值是多少? 由于它是一个自动变量,因此一旦函数结束,第三个 printd 中的值 1 就会消失,并在第二个 printd 中获得值 12。
如果是这样,第二个 printd 将再次导致第三个 printd 等等......
但是程序漂亮地打印了 123。
我对函数调用期间的控制流和变量值的理解哪里出了问题?
仅供引用,该程序来自 K&R 第 4.10 节递归
最佳答案
你错了:
If so,second printd will again lead to third printd
第二个 printd
从它停止的地方开始,而不是从函数 printd
的开头开始。因此,putchar
在第二个 printd
中执行,打印 2,同样的事情发生在第一个 printd
中,打印 3。
关于c - 递归控制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30589132/