2013-05-09 3 views
1

Я делаю один из простых программных C, сумма цифр 5-значного числа. Хотя я сделал это с помощью простой функции, но мне нужно сделать это с рекурсией. Я читал много решение в сети относительно этой проблемы с использованием рекурсии и реализовало один из моих. Но это дает ошибку, и я не могу определить, какая сетка я делаю в своем algo.Рекурсия, возможная ошибка в algo

#include<stdio.h> 
int sum5(int x); //function for sum of digits of 5 digit number 

int main() 
{ 
    int x; 
    int result; 
    printf("Enter a 5 digit number : "); 
    scanf("%d",&x); 
    printf("Number entered by you is %d",x); 
    result = sum5(x); 
    printf("Sum of digits of 5 digit number is = %d",&result); 
    return 0; 
} 

int sum5(int x) 
{ 
    int r; 
    int sum=0; 
    if(x!=0){ 
     r=x%10; 
     sum=sum+r; 
     x=x-r;  //doing this so that 0 come in the last and on diving it by 10, one digit will be removed. 
     sum5(x/10); 
    } 
    return sum; 
} 

но после его выполнения я получаю неправильный результат. Он сбрасывает некоторые анонимные значения на выходе.

+1

эта часть бесполезна x = x-r; поскольку то, что вы отправили впоследствии, в любом случае удалит самую цифру справа. он не будет работать, поскольку никто не получит возвращаемое значение из вызова рекурсии. – Infested

ответ

8

Также неверна функция sum5. Вы должны добавить значение sum5 в переменную sum функции вызывающего абонента.

int sum5(int x) 
    { 
     int r; 
     int sum = 0; 
     if (x != 0) { 
      r = x % 10; 
      sum = r; 
      //x = x - r; - this isn't required. integer division will floor x 
      sum += sum5(x/10); 
     } 
     return sum; 
    } 
+0

Хм .. ты пробовал это еще? – 2013-05-09 12:31:45

+0

@ 0A0D: я пробовал это с моим кодом, в основном с ошибкой и результатом. Я не добавлял результат рекурсии. Но теперь его рабочий тон – shailendra

+0

@shailendra: тогда принимайте этот ответ уже :) –

8

Это неверно, так как он печатает адрес из result, а не его значение:

printf("Sum of digits of 5 digit number is = %d",&result); 

Изменить на:

printf("Sum of digits of 5 digit number is = %d", result); 

Всегда проверять результат scanf() обеспечить действительное значение было прочитано:

/* Returns number of assignments made. */ 
if (scanf("%d", &x) == 1 && x > 9999 && x < 100000) 
{ 
} 

Плюс ошибка в реализации sum5() как указано Osiris .

+0

Да, что и результат был глупой ошибкой. И если if (scanf («% d», & x) == 1) {}, это оказалось очень полезным. – shailendra

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