Programa de suma recursiva de dígitos positivos.
Estoy enfrentando un problema, el programa casi funciona correctamente excepto que da +1 en el resultado de salida. Por ejemplo, si el número de entrada es 123 = 1+2+3=6, en cambio, da 7 como salida.
Puedo solucionar este problema simplemente agregando -1 en la declaración de printf
, pero quiero saber por qué está sucediendo esto.
#include <stdio.h>
int Sumdigits(int num);
int Sumdigits(int num){
if(num<1){
return 1;
}
else return (num%10+Sumdigits(num/10));
}
int main(){
int num;
printf("Ingrese un número: ");
scanf("%d",&num);
printf("%d",Sumdigits(num));
}
</stdio.h>
davy.ai
El problema en el programa se debe a que el valor de retorno inicial se establece en 1 en lugar de 0 en la función Sumdigits. Cuando las llamadas recursivas llegan al último dígito del número de entrada, la función devuelve 1 en lugar de 0, lo que provoca que se agregue un 1 adicional a la suma. Para solucionar este problema, cambie el valor de retorno inicial de la función de 1 a 0 de la siguiente manera:
Esto debería dar la salida correcta sin necesidad de realizar ningún ajuste adicional en la declaración printf.