[Python] Ein Programm zum Finden einer Fibonacci-Zahlenfolge (rekursive Funktion, Divisions-Governance-Methode, dynamische Planungsmethode)

Programm zum Auffinden der Fibonacci-Sequenz

Schreiben Sie ein Programm, das n Elemente in der Fibonacci-Zahlenfolge mit mehreren Beschreibungen findet.

Was ist die Fibonacci-Sequenz?

Eine Folge von Zahlen, die durch Hinzufügen des vorherigen und des vorherigen Begriffs erstellt wurden.

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

Wenn Sie sie addieren, wird ein großes Rechteck erstellt.

image.png

Die Fibonacci-Sequenz ist ein Wirbel aus Ammonit und Wirbeln, die im Raum größer werden.

Das goldene Rechteck von Steel Ball Run ist ebenfalls eine Fibonacci-Sequenz.


## [Methode 1] Verwendung der Methode

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])

Bestätigung


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

## [Methode 2] Verwenden Sie die rekursive Verarbeitung Verwenden Sie einen zurückgezogenen Prozess, der innerhalb einer Funktion eine eigene Funktion aufruft.

Es ähnelt dem Wiederholen, bis die angegebene Bedingung erfüllt ist, und der gleiche Vorgang wird wiederholt, bis die Rückgabebedingung erfüllt ist.

python


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

python


#Bestätigung
n=35
for i in range(1, n):
  print(fib(i))

Dieser Vorgang ist relativ zeitaufwändig. Dies liegt daran, dass dieselbe Berechnung ** einzeln in fib (n-1) bzw. fib (n-2) berechnet wird.

Da fib (n-2) früher berechnet, kann die Berechnungszeit stark reduziert werden, wenn die Lösung auf fib (n-1) aufgetragen wird.

Diese epochale Methode wird als ** dynamische Planungsmethode ** bezeichnet.


## [Methode 3] Dynamische Planungsmethode verwenden (rekursive Methode)

python


#Wenn nur Variablen vorhanden sind, wird memo zu einer globalen Variablen. Fügen Sie es daher in def ein und machen Sie es zu einer lokalen Variablen.
def fib_memo(n):
  #Fib, so dass der Wert auch nach Abschluss der Funktionsverarbeitung erhalten bleibt(n)Raus aus
  memo = [None]*(n+1)  #n+Bereiten Sie ein Array mit einem leeren Element vor

  def _fib(n):
    if n==0 or n==1:
      return 1
    if memo[n] != None:  #Wenn das Element des angegebenen Werts nicht None ist, verwenden Sie diesen Wert (* Anfangswerte sind alle None)
      return memo[n]
    memo[n] = _fib(n-1) + _fib(n-2) #Wenn Keine, ersetzen Sie die hinzugefügten Werte
    return memo[n]
  
  return _fib(n)

Bestätigung


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

-Keine: Geben Sie explizit an, dass es leer ist (kein Objekt) -_Funktionsname: Schlägt eine Funktion vor, die nur lokal verwendet werden soll

Der Berechnungsprozess ist erheblich schneller.


## [Methode 4] Dynamische Planungsmethode (für Satz)

Es ist auch möglich, die Memo-Methode anstelle der rekursiven Methode zu verwenden, um nacheinander aus kleinen Zahlen zu berechnen.

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] Ein Programm zum Finden einer Fibonacci-Zahlenfolge (rekursive Funktion, Divisions-Governance-Methode, dynamische Planungsmethode)
Beispielprogramm zum Auffinden der Fibonacci-Sequenz
Ein Shell-Programm, das eine Fibonacci-Sequenz anzeigt
Wiederholung der Memorisierung und dynamische Planungsmethode, bekannt aus der Python Fibonacci-Sequenz
Finden Sie das Umfangsverhältnis mit einer dreizeiligen Funktion [Python / Monte-Carlo-Methode]
Vielen Dank für die Fibonacci-Sequenz.
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
[Python] Ein Programm, das die Partitur rundet
Erstellt einen Python-Wrapper für die Qiita-API
Holen Sie sich den Aufrufer einer Funktion in Python
Ich habe zum ersten Mal versucht, Python zu programmieren.
Programm zur Suche nach demselben Bild
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
[Python] Ein Programm, das die Anzahl der Täler zählt
Python-Programm, das nach demselben Dateinamen sucht
Python Gibt die Funktion an, die ausgeführt werden soll, wenn das Programm endet
Betrachten Sie die Konvertierung von Python rekursiv in nicht rekursiv
Python-Umgebungskonstruktion für Programmieranfänger (Mac OS)
[Python] Stellen Sie sicher, dass die empfangene Funktion eine benutzerdefinierte Funktion ist
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Was bedeutet das letzte () in einer Funktion in Python?