Fonction récursive pour générer / imprimer une suite de Fibonacci
Je suis en train de créer une fonction récursive appel de méthode qui permettrait d'imprimer le Fibonacci jusqu'à un emplacement spécifique:
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
Selon ma compréhension de la fonction de fibonacci serait appelée récursivement jusqu'à ce que la valeur de l'argument n est passé de 1. Alors la fonction pile de restauration en conséquence. Alors quand j'ai appeler cette fonction à partir de la commande:
>> fibonacci(4)
La valeur de n est de 4, de sorte que la ligne 9 à l'exécution comme:
9 f(4) = fibonacci(3) + fibonacci(2);
Maintenant, je crois que le premier fibonacci(3) serait appelé - d'où encore une fois de fibonacci(3)
9 if(3) = fibonacci(2) + fibonacci(1);
L'ifs dans le numéro de la ligne 3 et 6 en prendra soin.
Mais maintenant, comment fibonacci(2) + fibonacci(1) déclaration de changement à l':
if(3) = 2 + 1;
Je reçois l'erreur ci-dessous et incapable de débogage supplémentaires à résoudre:
>> 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);
Veuillez fournir un aperçu de la solution et avec le paramètre qui serait fonction de fibonacci être appelée récursivement à la ligne numéro 9 de la première et, par conséquent,.
Ex Pour n = 4
f(n) = fibonacci(3) + fibonacci(2);
Il en sera de MATLAB appel de fibonacci(3) ou de fibonacci(2) en premier?
Ne pas le code-être quelque chose comme ci-dessous:
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)
Erreur: Fichier: de fibonacci.m: Colonne 5: 12
Inattendu MATLAB expression.
Pourquoi return dans une fonction entraîne une erreur?
- Je ne suis pas un expert dans MATLAB, mais regarde ici mathworks.com/help/matlab/ref/return.html il est dit que le retour est fait, dans votre cas, comme
f = 1
et pasf(1)=1
? J'ai peut-être tort. - Alors quelle valeur aura le recursed de retour de la fonction dans notre cas, f(4) = fibonacci(3) + fibonacci(2);' aboutirait à ce que, après le retour de l'exécution de l'instruction
- Je pense que vous devez modifier "return f(1);" et "return f(2);" à "return;".
- Toujours la même erreur si je les remplacer par @Divakar
- Je pense que vous avez besoin de changer
f(1)=1;
àf=1;
etf(2)=2
àf=2
, et aussireturn f(1)
etreturn f(2)
àreturn
. Enfinf(n) = ...
àf=...
; - Oui je obtenir la réponse correcte après modifications suggérées par @D. Kasipovic mais que faire si j'ai besoin d'imprimer l'ensemble de fibonacci de la série, car passé en paramètre à la fonction?
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Noter que c'est aussi une récursivité (qui n'évalue chaque n fois):
Si vous devez utiliser l'approche récursive, essayez ce -
Contrairement au C/C++, MATLAB avec "retour", on ne peut pas retourner une valeur, mais seulement le contrôle remonte à la fonction appelante. La sortie peut être retourné à l'appel de la fonction est stockée dans la variable de sortie est défini au début de la fonction.
EDIT 1: Pour l'ensemble de la suite de fibonacci et qui suppose que la série commence à partir de 1, utilisez ce -
Donne -
Créer un M-file pour la fonction de fibonacci et écrire du code comme indiqué ci-dessous
Écrire de code suivant dans la fenêtre de commande de matlab
De sortie :-
Créer une fonction qui retourne un Entier:
Ce sera le retour de la fibonacci de sortie de n nombres, Pour imprimer la série, Vous pouvez utiliser cette fonction comme ceci dans swift:
Elle affichera une série de 10 numéros.