Nun, zu verstehen, den Grund für diese Rückkehr in Rekursion mit Ihnen von Grundlagen der Funktionsaufruf denken kann/Stack-Rahmen:
Wir brauchen Anweisungen geben einen Wert zurück an den unmittelbaren Aufrufer der aktuellen Funktion des passieren Anruf-Frame. Dieser unmittelbare Aufrufer kann ein anderer Aufruf derselben Funktion im Falle von Rekursionen sein.
Wenn der Rückgabewert einer aufgerufenen Funktion (sei es rekursiv oder normal) nicht verwendet wird, wird dieser Rückgabewert entweder verworfen oder in vielen Sprachen als Fehler angezeigt. In einigen Fällen wird der Rückgabewert des letzten Funktionsaufrufs automatisch als Rückgabewert des aktuellen Funktionsaufrufs verwendet. Aus diesem Grund können Sie undefiniertes Verhalten sehen und verhindern, dass einige intelligente Compiler davor warnen.
Rekursion Anrufe sollten:
Basisfall: Irgend eine Bedingung für die wir eine Lösung und einen Rückgabewert haben. Es kann mehrere Basisfälle geben.
Algorithmus oder Logik, um näher zu unserem Grundfall zu kommen (d. H. Das ursprüngliche Problem zum einfacheren Problem zu zerlegen).
Rekursiver Aufruf, der das einfachere Problem wieder in die Funktion übergibt.
So in diesem Fall Ihr Basisfall (x> = 5), Logik näher an den Basisfall zu bekommen, ist (x ++) und rekursiven Aufruf ist addup mit dem Argumente x.Aber Sie speichern hier nicht den Rückgabewert, der verworfen oder verloren gehen kann und somit weitere Probleme verursachen kann. Daher sollte dieser korrekt behandelt werden als: return addup (x);
Ich hoffe, es macht jetzt Sinn.