理解代码

时间:2014-01-22 22:27:00

标签: c

我试图在这里理解代码。我一直试图理解它已经有一段时间了,因为我不能完全理解它,所以我求助于你。

#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

的新手

2 个答案:

答案 0 :(得分:5)

第一次,123n % 10评估为3n / 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的方式。