Nachfolgend ist der Code zum Reduzieren einer gegebenen Zahl auf eine einzelne Ziffer durch rekursives Hinzufügen der Ziffern der Zahl angegeben. Wenn der Eingang 845
ist, lautet die Ausgabe 8
. 8+4+5 = 17 -> 1+7 = 8
(output)Warum erhalte ich eine korrekte Ausgabe, obwohl der Code logisch falsch ist
#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;
}
In dem obigen Code in dem Block if (sum > 9)
Ich habe nicht den Funktionswert zurückgegeben. Ich habe gerade die Funktion aufgerufen. Logisch sollte diese Funktion einen falschen Wert ergeben. Aber wenn ich das obige Programm in meinem System laufen ließ, bekam ich die korrekte Summe der Ziffern in der Ausgabe. Ich bin nicht in der Lage, die Logik hinter diesem Verhalten zu verstehen.
Wenn Sie mit Ihrem Debugger durch den Code gehen, werden Sie sehen, was passiert. –
Es gibt keine Logik dahinter. Ein Programm mit nicht definiertem Verhalten kann * any * Ergebnis haben, einschließlich des erwarteten. –
In dieser anderen Frage ist nur 1 von 5 Antworten "korrekt" [Falsche Ausgabe der rekursiven Funktion zur Berechnung der Ziffernsumme einer Zahl] (http://stackoverflow.com/questions/7045189/incorrect-output-from- recursive-function-to-compute-summer-of-a-nummern) –