我试图在这里理解代码。我一直试图理解它已经有一段时间了,因为我不能完全理解它,所以我求助于你。
#include<stdio.h>
int sumdig(int);
int main()
{
int a, b;
a = sumdig(123);
b = sumdig(123);
printf("%d, %d\n", a, b);
return 0;
}
int sumdig(int n)
{
int s, d;
if(n!=0)
{
d = n%10;
n = n/10;
s = d+sumdig(n);
}
else
return 0;
return s;
}
我可以理解,该数字将继续传递该函数,直到它达到0,然后它返回1,因为0 == 0但是在它返回3并且以6完成后。我不明白。记住我是C
的新手答案 0 :(得分:5)
第一次,123
,n % 10
评估为3
,n / 10
评估为12
,因此会返回{{} 1}}。 3 + sumdig(12)
将以同样的方式返回sumdig(12)
,2 + sumdig(1)
将返回sumdig(1)
,1 + sumdig(0)
将返回sumdig(0)
,此时即将结束。总的来说,它会返回0
,这是3 + 2 + 1
中数字的总和。
答案 1 :(得分:3)
这是一个非常基本的递归调用...
按以下顺序调用函数sumdig
:
1.sumdig(123):
d=3
n=12
s=3+sumdig(12)
2.sumdig(12):
d=2
n=1
s=2+sumdig(1)
3.sumdig(1):
d=1
n=0
s=1+sumdig(0)
4.sumdig(0): returns 0
3. return 1+0
2. return 2+1
1.returns 3+3
这就是你得到6的方式。