Rekursive Funktion zum erzeugen / drucken eines Fibonacci-Reihe
Ich versuche, erstellen Sie eine rekursive Funktion aufrufen, Methode, der wäre drucken die Fibonacci-bis zu einem bestimmten Ort:
1 function f = fibonacci(n)
2 fprintf('The value is %d\n', n)
3 if (n==1)
4 f(1) = 1;
5 return;
6 elseif (n == 2)
7 f(2) = 2;
8 else
9 f(n) = fibonacci(n-1) + fibonacci(n-2);
10 end
11 end
Gemäß meinem Verständnis der fibonacci-Funktion rekursiv aufgerufen, bis der Wert von argument n übergeben werden, ist 1. Dann ist die Funktion Stapel würde rollback entsprechend. Also, wenn ich diese Funktion aufrufen aus dem Befehl:
>> fibonacci(4)
Ist der Wert von n ist 4, also Linie 9 führen wie:
9 f(4) = fibonacci(3) + fibonacci(2);
Jetzt glaube ich, dass das erste fibonacci(3) genannt werden würde - daher wieder für fibonacci(3)
9 if(3) = fibonacci(2) + fibonacci(1);
Ifs in Linie 3 und 6 aufpassen würde.
Aber jetzt, wie fibonacci(2) + fibonacci(1) - Anweisung würde sich ändern:
if(3) = 2 + 1;
Erhalte ich die folgende Fehlermeldung und kann nicht Debuggen weiter, es zu lösen:
>> fibonacci(4)
The value is 4
The value is 3
The value is 2
The value is 1
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in fibonacci (line 9)
f(n) = fibonacci(n-1) + fibonacci(n-2);
Error in fibonacci (line 9)
f(n) = fibonacci(n-1) + fibonacci(n-2);
Bitte geben Sie einige Einblicke für die Lösung und mit welchen parameter würden die fibonacci-Funktion rekursiv aufgerufen, an der Linie Nummer 9, erste und damit.
Ex Für n = 4
f(n) = fibonacci(3) + fibonacci(2);
So wird der MATLAB-Aufruf fibonacci(3) fibonacci(2) der erste?
Sollte nicht der code sein, einige Sache wie folgt:
1 function f = fibonacci(n)
2 fprintf('The valus is %d\n', n)
3 if (n==1)
4 f(1) = 1;
5 return f(1);
6 elseif (n == 2)
7 f(2) = 2;
8 return f(2);
9 else
10 f(n) = fibonacci(n-1) + fibonacci(n-2);
11 end
12 end
fibonacci(4)
Fehler: Datei: fibonacci.m-Linie: 5 Spalte: 12
Unexpected MATLAB expression.
Warum return-Ausdruck in einer Funktion ist, wodurch ein Fehler?
f = 1
und nicht f(1)=1
? Ich könnte falsch sein.Dann welchen Wert wird die recursed Funktion zurück, in unserem Fall " f(4) = fibonacci(3) + fibonacci(2);' ergeben würden, was nach dem return-Anweisung Ausführung
Ich glaube, Sie brauchen, um Bearbeiten "return f(1);" und "return f(2);" "return;".
Immer noch der gleiche Fehler, wenn ich die Stelle als pro @Divakar
Ich denke, dass Sie ändern müssen
f(1)=1;
zu f=1;
und f(2)=2
zu f=2
, und auch return f(1)
und return f(2)
zu return
. Schließlich f(n) = ...
zu f=...
;
InformationsquelleAutor Programmer | 2014-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Beachten Sie, dass dies auch eine Rekursion (wird nur ausgewertet, jeweils n mal):
Vielen Dank - ich Stimme zu. Der obige code gibt die fibonacci-Reihe mit dem Wert an dieser Position als das als parameter übergeben wird - ist es möglich, drucken Sie die volle fibonacci-Reihe über die rekursive Methode?
Es scheint sich nicht um Natürliche, um dies zu tun, da die gleichen n wird mehr als einmal aufgerufen.
siehe mein update!
InformationsquelleAutor DanielTheRocketMan
Wenn Sie rekursive Ansatz, versuchen, diese -
Im Gegensatz zu C/C++, MATLAB mit 'return' kann man nicht einen Wert zurückgeben, sondern nur die Kontrolle geht zurück an die aufrufende Funktion. Die Ausgabe zurückgegeben werden, in der aufrufenden Funktion gespeichert werden in die Ausgabe-variable definiert ist, an den Anfang der Funktion.
EDIT 1: Für die gesamte fibonacci-Reihe und die geht davon aus, dass die Serie beginnt, von 1, verwenden Sie diese -
Gibt -
Siehe EDIT 1.
InformationsquelleAutor Divakar
Erstellen Sie ein M-file für die fibonacci-Funktion und schreiben Sie den code wie unten angegeben
Schreiben Sie folgenden code in das Kommando-Fenster von matlab
Ausgabe :-
InformationsquelleAutor Indrakant Jha
Erstellen Sie eine Funktion, die zurückgibt Integer:
Wird das Ergebnis der fibonacci-Ausgabe von n zahlen, Zum drucken der Serie können Sie diese Funktion verwenden, wie dies in swift:
Gibt es die Reihe von 10 zahlen.
InformationsquelleAutor Keshav Tiwari