c - 递归循环跟踪

标签 c recursion

我编写了以下代码

#include <stdio.h>
void recurse();
int main()
{
recurse();
return 0;
}
void recurse()
{
    static int n=987654321;
    if(n==0)
        return ;
    printf("%d",n%10);
    n=n/100;
    int a=n;
    recurse();
    if(a!=0)
    printf("%d",a%10);
}

我不明白为什么输出是 135799753? 我认为答案是 135799,因为在打印 1357 之后的前 9 个之后,n 将变为 9,因此 n/100 将为零,因此递归函数将返回到主函数而不打印任何内容。 有不对的地方请指正。 提前致谢!!

最佳答案

程序输出正确。您的输出也包含这些值 -

if(a!=0)
printf("%d",a%10);

如果a的值不是0,也会被打印。但由于递归调用后的这些语句,这些值是从最后到第一个打印的。

您认为输出为135799。第二个 9a%10 的值,但之前的递归调用中的 a%10 的值也将被打印,因为这些语句在之后执行递归调用结束。

你可以在这个example中看到.

关于c - 递归循环跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557075/

相关文章:

c - 分段故障核心转储、指针和结构

javascript - JS新手: How to properly call a recursive function in an HTML document?

haskell - 使用守卫递归计算列表的长度抛出 "Non-exhaustive patterns in function go"

c - 跳过 OpenGL 预编译 header

c - 为什么 "=="对于字符指针返回 true?

c - 反转字符串,但它崩溃了

c - memcpy 什么都不做

java - 缓慢构建路径列表

用于递归搜索 FTP 特定文件名且超过 24 小时的 python 脚本

c++ - 是否可以在 C++ 中使用递归 vector ?