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