2017-03-22 3 views
0

Wie liefert die rekursive Funktion printCountRec (dist-1) + printCountRec (dist-2); funktioniert im folgenden Code. Durch meine Logik Der Funktionsaufruf printCountRec (dist-1) gibt 1 zurück und printCountRec (dist-2) gibt 0 zurück, indem diese beiden addiert werden. Die Antwort sollte 1 + 0 sein, also 1, aber ich bekomme die Antwort als 3. Ich bin es nicht es bekommen.Wie die Addition von 2 rekursiven Funktionen funktioniert

Programm für Anzahl Anzahl der Möglichkeiten, eine Entfernung zurückzulegen; Der Code ist als folgt-

#include <iostream> 
using namespace std; 


int printCountRec(int dist) 
{ 
    // Base cases 
    if (dist<0) return 0; 
    else if (dist==0) return 1; 

    // Recur for all previous 3 and add the results 
    else return printCountRec(dist-1) + printCountRec(dist-2); 

} 

int main() 
{ 
    int dist = 3; 
    cout << printCountRec(dist); 
    return 0; 
} 
+0

Warum haben Sie dies mit C markiert? Dies ist kein gültiger C-Code. Und Sie sollten lernen, einen Debugger zu verwenden und durch Ihren Code zu gehen, um zu verstehen, was er tut. – UnholySheep

+0

Klingt, als ob Sie mit einem Debugger durch den Code gehen sollten. Das zeigt dir genau, wie das Programm abläuft. – NathanOliver

Antwort

2

Dies ist, wie ich nach Ihrer Rekursion:

printCountRec(-1) = 0 
printCountRec(0) = 1 
printCountRec(1) = printCountRec(0) + printCountRec(-1) = 1 
printCountRec(2) = printCountRec(1) + printCountRec(0) = 2 
printCountRec(3) = printCountRec(2) + printCountRec(1) = 3 
0

Die printCountRec (dist-1) Funktionsaufruf kehrt 1 und printCountRec (dist- 2) wird zurückgegeben 0

Wie hast du das vermutet? Schritt für Schritt:

  • printCountRec(dist-1)printCountRec(2) bedeutet, die printCountRec(1) + printCountRec(0) nennen. Für diese beiden wird der erste Aufruf printCountRec(0) + printCountRec(-1) aufrufen, der 1+0 = 1 an printCountRec (2) zurückgibt, und der zweite gibt 1 an printCountRec (2) zurück.

    Mit anderen Worten haben Sie diesen Auftrag:

    printCountRec(dist-1) = printCountRec(2) --> 
    printCountRec(1) + printCountRec(0) --> 
    printCountRec(0) + printCountRec(-1) + 1 --> 
    1 + 0 + 1 --> 3 
    

    Das erste Mitglied der neben 2 ausgewertet wird.

  • printCountRec(dist-2)printCountRec(1) bedeutet, die printCountRec(0) + printCountRec(-1) nennen, 1+0 = 1 zu printCountRec(1) zurückkehrt.

    Mit anderen Worten haben Sie diesen Auftrag:

    printCountRec(dist-2) = printCountRec(1) --> 
    printCountRec(0) + printCountRec(-1) --> 
    1 + 0 --> 1 
    

    So das zweite Mitglied der neben 1 ausgewertet wird.

die beiden Mitglieder Hinzufügen (2 und 1) gibt Ihnen das Ergebnis 3.

0

dist = -1 Ausgänge 0

dist = 0 Ausgänge 1

dist = 1 Ausgänge 1

dist = 2 Ausgänge 2

dist = 3 Ausgänge 3

printCountRec (2) = printCountRec (1) + printCountRec (0) = 2

printCountRec (3) = printCountRec (2) + printCountRec (1) = 2 + 1 = 3.

Verwandte Themen