2017-03-15 8 views
-1

Gegeben:das Verfahren wird die folgende Methode Erklärung Rekursion unendlich

public static int fact(int num) { 
    int tmp = 1; 
    for (int i = 1; i <= num; i++) { 
     tmp *= i; 
    } 
    return tmp; 
} 

ich möchte es wieder schreiben als rekursive Methode und dann ein volles Programm schreiben, die Eingabe vom Benutzer und finden Sie heraus Tatsache (num) .

schrieb ich dieses aber konnte es nicht unendlich machen:

public static int fact(int num) { 
    int t = 1; 
    int i = 0; 
    if(i <= num) { 
     t *= i; 
    } 
    return fact(t); 
} 
+1

Was denken Sie 't * = I' tut, wenn Sie gerade eingestellt haben' I '' zu 0 '? – azurefrog

Antwort

1

In deinem Beispiel: num wird überhaupt nicht dekrementiert und daher geht es in unendliche Rerusion und ruft denselben method mit denselben Parameterwerten auf.

Eine vereinfachte Version würde wie folgt aussehen:

public static int fact(int num) { 
    if(num <= 1){ 
     return 1; 
    } 
    return num*fact(num-1); 
} 
+0

dieser hat funktioniert! Danke – Ghada

0

Eine erfolgreiche rekursive Funktion gegenüber dem Basisfall jedes Mal Fortschritte müssen Sie es ausführen.

Bei einer faktoriellen Funktion müssen Sie 1 vom Parameter subtrahieren, bevor der rekursive Aufruf erfolgt. (Warum? Weil fact(5) das Ergebnis fact(4) verwenden, was wiederum das Ergebnis der fact(3) verwenden.)

Also, in der return-Anweisung finden Sie eine Berechnung mit Ihrem aktuellen Parameter durchführt und das Ergebnis Ihrer rekursiver Aufruf - dh Sie werden den Anruf fact(num - 1) tätigen und ihn mit num multiplizieren.

Beachten Sie, dass Sie i nicht benötigen, da der Methodenparameter die Rolle eines "Counters" übernimmt, der bei jedem Aufruf einfach untergeht.

Beispiel:

public static int fact(int num) { 

    // Base case: 0! = 1 
    if(num == 0) return 1; 

    return num * fact(num - 1); 
} 
0

Versuchen Sie folgendes:

public static int fact(int num){ 
    //This is the ending condition 
    if(num == 0 || num == 1){ 
     return 1; 
    } 

    //Otherwise return num * fact(num - 1) 
    return num * fact(num-1); 
} 

Beispiel dafür, wie es funktioniert:

wenn Sie 3 als Eingabe nahm erhalten Sie:

3 * fact(3 - 1) = 3 * 2 * fact(2 - 1) = 3 * 2 * 1 = 6 
Verwandte Themen