递归控制流程

Recursion Control flow

#include<stdio.h>

void printd(int n)
{
    if(n/10)
        printd(n/10);
    putchar(n%10+'0');
}

在上面的代码中,将 n 视为正整数 它的值为 123.

第一次,123被传递给printd(first printd) 第二次,12传给了printd(second 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

second printd 从它停止的地方开始,而不是从函数 printd 的开始。因此,putchar 在第二个 printd 中执行,打印 2 并且在第一个 printd 中发生同样的事情,打印 3.