c - 递归控制流程

标签 c recursion kernighan-and-ritchie

#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/

相关文章:

c - DRMAA- 编译 c 文件时无法链接 drmaa 库

c - C 问题 : Vacated Bits Not 0 When Shifting ~0? 中的右移无符号整数

c - K&R Exercise 1-9 : output the input, 用一个空格替换多个空格

c - 在 C 中打印字长直方图

C(UNIX 环境)Fork 系统调用从不返回 0,不创建子进程

c - 预期为 ‘voidpc’ 但参数的类型为 ‘double’

c - 嵌套结构分配内存

python - 使用列表在 python 中进行递归时出错

Java 二叉树插入无法正常工作

recursion - Dhall 中的整数除法