无法破译输出

标签 c recursion static

#include<stdio.h>
int f(int n)
{
    static int a;
    if(n)
        a=n%10+f(n/10);
    return a;
}

int main()
{
    printf("%d",f(12345));
}

输出是 15。我怀疑堆栈内存是如何使用的。

最佳答案

让我们假装是电脑:

  • f(12345)
    • 制作int a,设置为0(静态)
    • a = 12345%10 + f(1234)
    • 记下程序计数器,这样我们就可以记住返回的位置
      • f(1234)
      • a = 1234%10 + f(123)
      • 记下程序计数器,这样我们就可以记住返回的位置
        • f(123)
        • a = 123%10 + f(12)
        • 记下程序计数器,这样我们就可以记住返回的位置
          • f(12)
          • a = 12%10 + f(1)
          • 记下程序计数器,这样我们就可以记住返回的位置
            • f(1)
            • a = 1%10 + f(0)
            • 记下程序计数器,这样我们就可以记住返回的位置
              • f(0)
              • 返回 a,即 0(因为我们还没有改变它)
            • 返回 a = 1%10 + 0 = 1
          • 返回 a = 12%10 + 1 = 3
        • 返回 a = 123%10 + 3 = 6
      • 返回 a = 1234%10 + 6 = 10
    • 返回 a = 12345%10 + 10 = 15
工作完成。

关于无法破译输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786023/

相关文章:

c - 我是否需要在字符串数组中包含终止字符的空间?

子进程可以更改父进程共享的静态变量吗?

c++ - 如何在具有大端架构的机器上测试您的代码?

Swift重写静态方法编译报错

c++ - 静态成员和多线程

c# - 检查应用程序是否安装在注册表中

c - 需要数据结构练习

algorithm - 有人可以对这个 8 皇后算法中的递归进行反混淆吗

javascript - 递归遍历对象以创建父子关系

c++ - 在全局空间中访问的私有(private)静态对象