2014-01-22 189 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