2016-08-08 34 views
-1

Wir wissen, dass Fakultäts als (wenn die Verwendung C++) geschrieben werden konnteWarum das Ergebnis Factorial in Rekursion ohne "return" geschrieben

int factorial(int number) 
{ 
     if (number == 0) 
      return 1; 
     else 
      return (number * factorial(number - 1)); 
} 

wenn schrieb als

int factorial(int number) 
{ 
    if (number == 0) 
      return 1; 
    else 
      (number * factorial(number - 1)); 
} 

sehen, dass es keine Rückkehr in der else-Klammer, dann ist das Ergebnis immer 1, egal was die Zahl ist, warum ist das?

Vielen Dank.

+2

Wenn die fragliche Sprache C ist, dann wird die untere Funktion ein undefiniertes Verhalten aufweisen, da der 'else' Pfad niemals etwas zurückgibt; in Java wird der Code aus dem gleichen Grund nicht vollständig kompiliert – oldrinb

+0

Und was auch immer die Sprache in Ihrer Frage sein mag, sollten Sie es über Tags oder in Ihrer Frage identifiziert haben. – EJP

Antwort

-1

Für die Factorial einer beliebigen Anzahl herauszufinden, was wir tun es die Zahl mit 1 weniger Zuwachs multiplizieren, bis er 1 erreicht

Zum Beispiel Um Faktorielle von herauszufinden: Wir tun n * (n-1) * (n-2) ... (nm) bis (nm) = 1

Code Betrachten und versuchen, einen Stapel und einen Testlauf des Codes zu machen.

Beim ersten Aufruf, Rückkehr 5 * FAC (5-1) .. Consequetively geht es weiter, bis sein

5 * 4 * 3 * 2 * fact (1), wo der FAC (1) returns 1 kann alles zu vorherigen Aufrufen zurückverfolgt werden.

Die kurze Antwort ist die Rückkehr 1 fungiert als eine Grundbedingung, die der Haltepunkt ist.

+0

Um genauer zu sein auf die Frage, die Sie stellen wollen: Im else-Block gibt es keine Rückgabe. Daher wird die Rendite 1 sein, sobald sie die Grundbedingung erfüllt. Sobald der Code in Richtung der Rekursion weitergeht. Ihr Code berechnet nur den Else-Block, kehrt jedoch nicht zur aufgerufenen Funktion zurück. Daher ist die Enderückgabe immer 1. – Sohil

+0

Wie, * genau, * bewirkt das Fallen durch den Block "else", dass die Methode 1 zurückgibt? Das ist die eigentliche Frage, und Sie haben es nicht beantwortet. – EJP

+0

Hier ist ein [Link] (http:// Stackoverflow.com/questions/5631447/how-recursion-works-in-c), um das Problem besser zu verstehen Jede Rekursion wird einen internen Stapel verwalten, um alle notwendigen Instanzen der Variablen beim Aufruf. Beachten Sie, dass Ihre Funktion einen int-Wert zurückgeben muss. Es gibt nur eine return-Anweisung im Code, die aufgerufen wird, wenn factorial (0). Dies wird vom Rückkehrstapel betrachtet, während zu der aufgerufenen Funktion zurückgekehrt wird – Sohil