es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , ,

Answer

  1. Avatar for 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:

    int Sumdigits(int num){
        if(num<1){
            return 0;
        }
        else return (num%10+Sumdigits(num/10));
    }
    

    Esto debería dar la salida correcta sin necesidad de realizar ningún ajuste adicional en la declaración printf.

Comments are closed.