Di seguito è riportato il codice per la riduzione di un determinato numero a una singola cifra aggiungendo le cifre del numero in modo ricorsivo.Perché ottengo l'output corretto anche se il codice è logicamente errato
Ad esempio se l'ingresso è 845
l'uscita è 8
. 8+4+5 = 17 -> 1+7 = 8
(uscita)
#include <stdio.h>
#define TRUE 1
int reduceToSingle(int numb);
int main()
{
int numb;
scanf("%d",&numb);
printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));
return TRUE;
}
int reduceToSingle(int numb)
{
int sum = 0, digit = 0;
for (digit = numb % 10; numb != 0; numb = numb/10)
{
digit = numb % 10;
sum += digit;
}
if (sum > 9)
reduceToSingle(sum);
else
return sum;
}
Nel codice precedente nel blocco if (sum > 9)
non ho restituito il valore della funzione. Ho appena chiamato la funzione. Logicamente questa funzione dovrebbe dare un valore errato. Ma quando ho eseguito il programma di cui sopra nel mio sistema ho ottenuto la somma corretta di cifre in uscita. Non sono in grado di comprendere la logica dietro questo comportamento.
Se si passa attraverso il codice utilizzando il debugger, si vedrà cosa sta succedendo. –
Non c'è logica dietro. Un programma con comportamento non definito può avere * qualsiasi * risultato, incluso quello che ci si aspetta. –
In questa domanda, solo 1 risposta su 5 è "corretta" [Output non corretto dalla funzione ricorsiva per calcolare la somma di cifre di un numero] (http://stackoverflow.com/questions/7045189/incorrect-output-from- funzione ricorsiva-a-computare-somma-di-cifre-di-un-numero) –