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

Первый раз вокруг, с 123, n % 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.

Смежные вопросы