Nombre d'appels pour la n-ième nombre de Fibonacci
Envisager l'extrait de code suivant:
int fib(int N)
{
if(N<2) return 1;
return (fib(N-1) + fib(N-2));
}
Étant donné que fib
est appelée main avec N comme 10,35,67,... (dire), le nombre total des appels
sont faits pour fib
?
Est-il un rapport à ce problème?
PS: C'est une question théorique et ne doit pas être exécuté.
EDIT:
Je suis conscient du fait que d'autres méthodes pour accélérer le calcul de la suite de Fibonacci.
Je veux une solution pour le calcul du nombre de fois fib est invoquée pour fib(40),fib(50) ,.. sans l'aide du compilateur et de l'examen de la condition où vous êtes censé répondre 40 question similaire à celui-ci dans un stipulé de temps ( environ 30 bonbons à la menthe).
Merci,
Qu'essayez-vous de réaliser? En supposant que vous n'êtes pas tout simplement à la recherche de quelqu'un pour répondre à vos devoirs.
Est-ce un devoir? Vous ne devriez pas demander à d'autres personnes de faire vos devoirs pour vous; vous devriez au moins montrer ce que vous avez essayé jusqu'à présent et demander sur le problème spécifique que vous avez rencontré.
(Presque mais pas tout à fait dupe): stackoverflow.com/questions/360748/...
Non ce n'est pas un travail à domicile problème!!!!!
Je dirais que cela dépend de si vous utilisez memoization pour garder le résultat d'précédemment calculés nombres de fibonacci ou pas 🙂
Est-ce un devoir? Vous ne devriez pas demander à d'autres personnes de faire vos devoirs pour vous; vous devriez au moins montrer ce que vous avez essayé jusqu'à présent et demander sur le problème spécifique que vous avez rencontré.
(Presque mais pas tout à fait dupe): stackoverflow.com/questions/360748/...
Non ce n'est pas un travail à domicile problème!!!!!
Je dirais que cela dépend de si vous utilisez memoization pour garder le résultat d'précédemment calculés nombres de fibonacci ou pas 🙂
OriginalL'auteur whacko__Cracko | 2009-11-15
Vous devez vous connecter pour publier un commentaire.
Laisser f(n) être le nombre d'appels effectués à calculer
fib(n)
.Donc, f est au moins O(fib(n)). En fait, f(n) est 2 * fib(n) - 1. Nous montrons par induction:
Il existe des moyens efficaces de calculer n'importe quel terme de Fibonacci. Donc la situation est la même pour f(n).
Merci,je sais que cette relation de Récurrence.J'étais curieux de le résoudre par la directe de la formule. Dans le document, il est donné pour trouver la valeur de la Fib(40) qui est en fait 331160281.Je me demande comment le résoudre en 30 secondes (sans compilateur de cours)
J'espère que ma mise à jour de la réponse vous aide à répondre à cette question.
Je l'ai déjà dit, je suis conscient de la plus rapide des algorithmes de génération de nième nombres de Fibonacci. Votre induction mesures sont correctes, mais toujours pas possible pour le calcul de f(40) à la main dans un très court laps de temps.
vous n'êtes pas censé s'appliquer à l'induction, mais au lieu de cela aller avec la formule f(n) = 2 * fib(n) - 1. Depuis, comme vous le dites, vous ont un algorithme rapide pour calculer les nombres de Fibonacci, ce qui résout le problème. Droit?
OriginalL'auteur Stephan202
Il existe une étroite-forme de l'équation pour le n-ième nombre de fibonacci: http://en.wikipedia.org/wiki/Fibonacci_number#Closed_form_expression
Dans le pseudo-code que vous avez posté, le nombre d'appels satisfait à la relation de récurrence
C'est presque la même que la Fibonacci relation de récurrence. La preuve par induction peut montrer que le nombre d'appels à la fib faite par fib(n) est égale à 2*fib(n)-1, pour n>=0.
Bien sûr, le calcul peut être accéléré en utilisant l'expression analytique, ou par l'ajout de code à mémoriser les valeurs précédemment calculées.
x(n) = x(n-1) + x(n-2) + 1
?pas de. seq = 1,1,2,3,5,8,13,... il n'y a pas de +1 nécessaire.
nous parlons du nombre de les appels de fonction, pas la séquence de Fibonacci. E. g.
fib(0)
etfib(1)
1 appel, maisfib(2)
nécessite 3 appels (pas 2!): l'appel lui-même, et les deux appels récursifs.Stephan202, merci pour cette remarque. J'ai corrigé ma réponse.
avez-vous réellement en mesure d'effectuer la preuve par induction? Je pense que la formule est incorrecte (voir ma réponse).
OriginalL'auteur unutbu
Comme mentionné ci-dessus, vous avez besoin pour résoudre le périodique suivant l'équation:
K(n)=K(n-1)+K(n-2)+1
Nous allons l'écrire pour n-1: K(n-1)=K(n-2)+K(n-3)+1
Maintenant, il faut soustraire le deuxième en partant de la première:
K(n)-K(n-1) = K(n-1) - K(n-3),
ou
K(n) - 2*K(n-1) + K(n-3) = 0.
La caractéristique respective équation sera:
x^3 - 2*x^2 + 1 = 0.
Il a des racines: 1, (1+sqrt(5))/2, (1-sqrt(5))/2
Donc pour tout réel A,B,C de la fonction suivante
K(n) = A*(1)^n + B*((1+sqrt(5))/2)^n + C*((1-sqrt(5))/2)^n
sera une solution de l'équation.
Pour trouver A,B,C, vous devez définir plusieurs valeurs initiales K(0), K(1), K(2) et de résoudre le système d'équations.
-1.
K(n) - 2*K(n-1) + K(n-3) = 0
ne se traduisent pasx^3 - 2*x^2 + 1 = 0
...K(n)
n'est pasx^3
,K(n-1)
n'est pasx^2
, etK(n-3)
n'est certainement pas 1. Au mieux, vous pouvez traduireK(n) - 2*K(n-1) + K(n-3) = 0
enx - 2*y + z = 0
sauf si vous pouvez prouver une relation entre ces variables. Réponse erronée et trompeuse.Neil, la réponse n'est pas trompeuse. Vous feriez mieux de lire sur l'utilisation de la caractéristique équations à résoudre linéaire récidives. Voici le lien: [hcmop.wordpress.com/2012/04/20/...
OriginalL'auteur Dmitry Shkolnik
phi est une constante
n est le nombre de fibonacci...
position vous donnera le qui nombre de fibonacci est n
par exemple à 13 , la position sera 7 - 0 1 1 2 3 5 8 13
à l'aide de cette position juste de calculer le nombre de fibonacci à la position 1 ou de n'importe quelle position que vous voulez par rapport à donné le nombre de fibonacci.
floor((pow(phi, position)/sqrt(5))+0.5)
- est la formule standard pour le calcul du n-ième de fibonacci num (Note - Ce n'est pas une approximation)J'ai juste inverser cette formule pour calculer la position et l'utilisation de la position - 1 pour calculer la précédente nombre de fibonacci.
Ref - http://itpian.com/Coding/20951-Given-the-Nth-fib-no-and-find-the--N-1-th-fib-number-without-calculating-from-the-beginning---------.aspx
OriginalL'auteur Jeet
C'est un problème classique pour résoudre avec Relations de Récurrence.
Plus précisément, le problème de fibonacci a les paramètres suivants:
Une fois que vous maîtrisez la résolution des récurrences, vous n'aurez aucun problème pour parvenir à une solution (qui, incidemment, est exactement le même que
fib(n)
).OriginalL'auteur Yuval Adam
Question intéressante, je ne peux pas vous donner une formule, mais j'ai écrit un Rubis programme pour le faire, il travaille sur les chiffres que j'ai trouvé sur le papier, et cela devrait fonctionner pour tout.
.
C'est lent.. je suis en train de comprendre 35 maintenant, je vais modifier quand il se termine.
Edit:
OriginalL'auteur Jeffrey Aylesworth