Récursion Sur La Queue De Fibonacci
Comment puis-je mettre en œuvre une récursif de la fonction de Fibonacci avec aucune boucle exécute en O(n)?
- Savez-vous comment obtenir le troisième nombre de Fibonacci? Quatrième? Cinquième?
- "il faut un appel récursif de la fonction d'assistance" - quoi? Pourquoi? L'approche itérative est beaucoup plus facile. Je suppose qu'ils veulent une formulation récursive de la version itérative de la boucle.
- Qu'est-ce que "n'est pas autorisé linéaire" censé signifier?
- Désolé, ce sont juste les spécifications. Je ne peux pas utiliser les boucles, mais elle doit encore être linéaire.
- L'astuce: retour de deux nombres, la dernière et la précédente.
- Est-ce un devoir?
- De retour de deux nombres de fibonacci.
- que voulez-vous dire à propos de "pas de boucles d'exécution en O(n)" ????
Vous devez vous connecter pour publier un commentaire.
Généralement, je serais contre le fait de poster une réponse à des devoirs à faire à la question comme ça, mais tout le posté jusqu'à présent semble être de compliquer à l'excès des choses. Comme dit dans les commentaires ci-dessus, vous devriez utiliser la récursivité pour résoudre le problème comme vous le feriez de manière itérative.
Voici la solution itérative:
Voici un équivalent solution récursive:
Noter que dans les deux cas, nous avons fait calculer jusqu'à Fn+1, mais le retour au Fn comme résultat. Cela correspond bien avec le "hint" vous avez été donné.
J'espère que vous prendrez le temps de comparer les deux solutions et vous convaincre qu'elles sont équivalentes. Comprendre comment transformer une solution itérative pour un équivalent récursive (ou vice versa) est une bonne compétence à développer.
def fib(n, a=0, b=1):
etreturn fib(n-1, b, a+b) if n > 0 else a
Scala code pour trouver de la n-ième Nombre de Fibonacci.
Pour plus d'informations sur la Queue de la Récursivité http://nerds.logdown.com/posts/1406258-n-th-fibonacci-number
Pour résoudre ce dans le temps linéaire, vous devez utiliser une programmation dynamique technique connue sous le nom memoization.
L'algorithme de Fibonacci en pseudo-code, à l'aide de memoization, ressemble à ceci:
D'expliquer, de vous après chaque appel à fib(x) - vous stocker le résultat dans une carte mémoire. Pour chaque appel ultérieur, toutes les recherches de fib(x) sera libre: c'est, en regardant le résultat dans la mémoire ne coûte que O(1) fois.
n
appels récursifs qui doit tenir sur la pile pourfib
. Comparez cela à de la naïveté de la récursivitéfib(n) = fib(n-1) + fib(n-2) if n >1 else n
Au cas où quelqu'un est à la recherche d'une solution d'activer JavaScript:
Qui s'exécute en O(n) en temps et O(1) de l'espace avec la queue d'appel d'optimisation.