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 pas f(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; et f(2)=2 à f=2, et aussi return f(1) et return f(2) à return. Enfin f(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?

InformationsquelleAutor Programmer | 2014-03-06