[Python] Un programme pour trouver une séquence de Fibonacci (fonction récursive, méthode de gouvernance divisionnaire, méthode de planification dynamique)

Programme pour trouver la séquence de Fibonacci

Écrivez un programme qui trouve n éléments dans la séquence de nombres de Fibonacci avec plusieurs descriptions.

Quelle est la séquence de Fibonacci?

Une séquence de nombres créée en ajoutant le terme précédent et le terme précédent.

1,1,2,3,5,8,13,21,34,55,,,,,,

Lorsque vous les ajoutez ensemble, un grand rectangle est créé.

image.png

La séquence de Fibonacci est un tourbillon d'ammonite et de tourbillons qui grossissent dans l'espace.

Le rectangle d'or de Steel Ball Run est également une séquence de Fibonacci.


## [Méthode 1] Utilisation de la méthode

python


def fib(n):
  arr = [1,1]
  for j in range(n-1):
    val = arr[j] + arr[j+1] 
    arr.append(val) 

  return (arr[len(arr)-1])

Vérification


n=35
for i in range(1, n):
  print(fib(i))

## [Méthode 2] Utiliser le traitement récursif Utilisez un processus récurrent qui appelle sa propre fonction dans une fonction.

Cela revient à répéter jusqu'à ce que la condition spécifiée soit remplie pour, et le même processus est répété jusqu'à ce que la condition de retour soit remplie.

python


def fib(n):
  if n==1 or n==2:
    return 1
  return fib(n-1) + fib(n-2)

python


#Vérification
n=35
for i in range(1, n):
  print(fib(i))

Ce processus prend relativement du temps. En effet, le même calcul est ** calculé individuellement dans fib (n-1) et fib (n-2), respectivement.

Puisque fib (n-2) calcule plus tôt, si la solution est appliquée à fib (n-1), le temps de calcul peut être considérablement réduit.

Cette méthode historique est appelée ** méthode de planification dynamique **.


## [Méthode 3] Utiliser la méthode de planification dynamique (méthode récursive)

python


#S'il ne s'agit que d'une variable, memo devient une variable globale, alors mettez-la dans def et faites-en une variable locale.
def fib_memo(n):
  #Fib pour que la valeur reste même après la fin du traitement de la fonction(n)Sors de
  memo = [None]*(n+1)  #n+Préparez un tableau contenant un élément vide

  def _fib(n):
    if n==0 or n==1:
      return 1
    if memo[n] != None:  #Si l'élément de la valeur spécifiée est différent de None, utilisez cette valeur (* Les valeurs initiales sont toutes None)
      return memo[n]
    memo[n] = _fib(n-1) + _fib(n-2) #Si aucune, remplacez les valeurs ajoutées
    return memo[n]
  
  return _fib(n)

Vérification


n=40
for i in range(0, n):
  print(fib_memo(i))

-Aucun: indiquer explicitement qu'il est vide (aucun objet) -_Nom de la fonction: suggère une fonction à utiliser uniquement localement

Le processus de calcul est considérablement plus rapide.


## [Méthode 4] Méthode de planification dynamique (pour la phrase)

Il est également possible d'utiliser la méthode mémo au lieu de la méthode récursive pour calculer un par un à partir de petits nombres.

python


def fib_dp(n):
  memo = [None]*n
  memo[0] = 1
  memo[1] = 1
  for i in range(2, n):
    memo[i] = memo[i-1] + memo[i-2]
  return memo

Recommended Posts

[Python] Un programme pour trouver une séquence de Fibonacci (fonction récursive, méthode de gouvernance divisionnaire, méthode de planification dynamique)
Exemple de programme pour trouver la séquence de Fibonacci
Un programme shell qui affiche une séquence de Fibonacci
Récurrence de mémorisation et méthode de planification dynamique connue de la séquence Python Fibonacci
Recherche du rapport de circonférence avec une fonction à 3 lignes [méthode Python / Monte Carlo]
Merci pour la séquence de Fibonacci.
Une fonction qui mesure le temps de traitement d'une méthode en python
[Python] Faire de la fonction une fonction lambda
[Python] Un programme qui arrondit le score
Création d'un wrapper Python pour l'API Qiita
Récupérer l'appelant d'une fonction en Python
J'ai essayé la programmation python pour la première fois.
Programme pour rechercher la même image
Python: préparez un sérialiseur pour l'instance de classe:
[Python] Un programme qui compte le nombre de vallées
Programme Python qui recherche le même nom de fichier
python Spécifie la fonction à exécuter lorsque le programme se termine
Envisagez la conversion de Python récursif en non récursif
Construction d'environnement Python pour les débutants en programmation (Mac OS)
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
[Python] Un programme qui compare les positions des kangourous.
Que signifie le dernier () dans une fonction en Python?