2014-01-22 137 views
0

我想在这里了解一个代码。我一直在尝试去理解它,因为我不能完全理解它,所以我正在寻求你的帮助。了解代码

#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

第一修复缩进,以便可以轻松解析代码。你能做到吗? –

+0

是的,请稍等 – user2985083

+0

这里让我知道如果这是好的 – user2985083

回答

5

首次圆形,123n % 10将评估为3,并n/10将评估为12,所以它会返回3 + sumdig(12)sumdig(12)将以同样的方式返回2 + sumdig(1),sumdig(1)将返回1 + sumdig(0),并且sumdig(0)将返回0,此时它将停止。总的来说,它将返回3 + 2 + 1,这是123中数字的总和。

+0

惊人的!谢谢 – user2985083

+0

不客气。 –

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