Mein Verstand ist nicht in der Lage zu verstehen, wie der Wert von diesem einfachen rekursiven Algorithmus zurückgegeben wird. Der Algorithmus ist wie folgt:Wie wird der Wert zurückgegeben? - Rekursiver Algorithmus
int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
Ich frage mich, wie die Eingabe 5 dieser Funktion 5 zurückkehrt? Ich weiß, dass die fünfte Fibonacci-Zahl 5 ist, also ist dies die richtige Antwort, aber ich bin nicht sicher, wie diese Antwort aus dem obigen Code abgeleitet ist. Die ersten fünf Fibonacci-Zahlen: 1 1 2 3 5.
Von meinem begrenzten Verständnis denke ich, dass die Übergabe von 5 an diese Funktion 7 zurückgeben würde. Dies liegt daran, 5-1 = 4 und 5-2 = 3. Dann addieren Sie diese beiden Zahlen zusammen erhalte ich die einfache ganze Zahl 7. Hat das Sinn ergeben? Ich bin sicher, dass ich bereits jemanden verloren habe, der das liest, obwohl das sehr einfach ist. Wenn ich das lesen würde, wäre ich verloren.
Wenn ich einen Rekursionsbaum mache und die rekursiven Aufrufe von fib ab 5 zeige, sehe ich nicht, wie dies schließlich 5 zurückgibt, aber ich sehe alle Aufrufe der Funktion fib()
bis schließlich 1 zurückgegeben wird Argument zu fib()
ist 0 oder 1. Der Rekursionsbaum, den ich zeichnete, ist nur eine Kopie von der, die an diesem page gezeigt wird.
Kann mir dieser rekursive Algorithmus helfen?
Wenn Sie versuchen, Rekursion zu verstehen, würde ich mit einem einfacheren Beispiel beginnen. Eine rekursive faktorielle Funktion wäre wahrscheinlich leichter zu verstehen. – Carcigenicate
Es heißt nicht, Rückkehr (n-1) + (n-2); '. Es heißt 'Rückkehr fib (n-1) + fib (n-2);'. Mit anderen Worten, mit 'n == 5 'wird' fib (4) + fib (3); '. –
@ FrançoisAndrieux - aber was sind 'fib (4)' und 'fib (3)', aufgeteilt in rekursive Aufrufe? :-) –