Heim Backend-Entwicklung Python-Tutorial So implementieren Sie die Fibonacci-Funktion mit Python

So implementieren Sie die Fibonacci-Funktion mit Python

Mar 10, 2017 pm 01:58 PM
python

In diesem Artikel wird hauptsächlich die Verwendung von Python zur Implementierung von Fibonacci-Funktionsinformationen beschrieben.

Fibonacci-Fibonacci-Sequenz ist nur eine Rekursion kann das wahrscheinlich machen.

Ich habe kürzlich Python gespielt und bin zufällig auf einen Beitrag im Internet über die Entwicklung von Python-Programmierern gestoßen. Deshalb habe ich vor, einen Beitrag zu imitieren, der mehr als zehn Methoden zur Vervollständigung einer Fakultätsfunktion verwendet. Hier werde ich eine Fibonacci-Funktion in neun verschiedenen Stilen schreiben.

Die Anforderungen sind sehr einfach: Geben Sie n ein, geben Sie die n-te Fibonacci-Zahl aus, n ist eine positive ganze Zahl

Im Folgenden sind die neun verschiedenen Stile aufgeführt:

1) Python-Programmierer, die zum ersten Mal Programme schreiben:

def fib(n):
  return nth fibonacci number
Nach dem Login kopieren

Erklärung:
Menschen, die zum ersten Mal Programme schreiben Folgen Sie oft der Syntax der menschlichen Sprache und nicht der Syntax der Programmiersprache. Nehmen Sie als Beispiel das erste Programm, das er geschrieben hat, um Schaltjahre direkt zu bestimmen: Wenn das Jahr ein Schaltjahr ist , das Ausgabejahr ist ein Schaltjahr, andernfalls ist das Jahr kein Schaltjahr.

2) C-Programmierer, die gerade Python gelernt haben:

def fib(n):#{
 if n<=2 :
  return 1;
 else:
  return fib(n-1)+fib(n-2);
#}
Nach dem Login kopieren

Hinweis:
Ich bin neu darin In Python bin ich es nicht gewohnt, zum Teilen von Programmblöcken Einrückungen anstelle von geschweiften Klammern zu verwenden, und nach jeder Anweisung steht kein Abschlusszeichen. Daher ist das erste, was ich nach dem Schreiben einer Python-Funktion normalerweise mache, einfach die geschweiften Klammern auskommentieren und die fehlenden Doppelpunkte hinzufügen .

3) Faule Python-Programmierer:

def fib(n):
  return 1 and n<=2 or fib(n-1)+fib(n-2)
Nach dem Login kopieren

Erklärung:
Wussten Sie das, nachdem Sie „Learning Python“ gesehen haben? Python hat keinen ternären Operator? , aber angesichts der Tatsache, dass der Bool-Wert in Python etwas ganz Besonderes ist (ein bisschen wie in C, bedeutet ungleich Null wahr, nicht leer bedeutet wahr) und die logischen Anweisungen von Python auch die Kurzschlussauswertung (Short-Circuit Evaluation) unterstützen, ist dies möglich geschrieben werden Eine Nachahmung? Aussage kommt heraus.

4) Faule Python-Programmierer:

 fib=lambda n:1 if n<=2 else fib(n-1)+fib(n-2)
Nach dem Login kopieren

Hinweis:
Lambda-Schlüsselwort, das ich in C# und Scheme verwendet habe Da Lambda in Python einfacher ist als in C# und der Verwendung in Scheme sehr ähnlich ist, habe ich mich schnell daran gewöhnt. Diese Schreibweise wird häufig verwendet, wenn einige kleine Funktionen in der Python-Shell deklariert werden.

5) Python-Programmierer, die gerade mit dem Erlernen von Datenstrukturen fertig sind:

def fib(n):
 x,y=0,1
 while(n):
  x,y,n=y,x+y,n-1
 return x
Nach dem Login kopieren

Erklärung:
Fibonacci vorne Funktionen sind alle Implementierungen der Baumrekursion. Selbst wenn Sie einen kleinen Algorithmus lernen, sollten Sie die Ineffizienz dieser Art der Rekursion kennen. Hier kann der Wechsel von der Baumrekursion zur entsprechenden Iteration die Effizienz erheblich verbessern.
Die Tupelzuweisungsfunktion von Python gefällt mir sehr gut. Sie kann den Code erheblich vereinfachen. Beispielsweise kann das vorherige tmp=a;a=b;b=tmp; direkt mit dem Satz a,b=b,a implementiert werden, was sowohl prägnant als auch klar ist.

6) Python-Programmierer, die SICP-Kurse belegen:

def fib(n):
  def fib_iter(n,x,y):
   if n==0 : return x
   else : return fib_iter(n-1,y,x+y)

  return fib_iter(n,0,1)
Nach dem Login kopieren

Hinweis:
Hier verwende ich The very Die allgemeine Tail-Recursion-Schreibmethode (Tail-Recursion) in der Scheme-Sprache wird eingeführt. In Scheme gibt es keine Iteration, aber Invarianten und Schwanzrekursion können zur Simulation der Iteration verwendet werden, um den gleichen Effekt zu erzielen. Allerdings weiß ich immer noch nicht, ob Python entsprechende Optimierungen für die Tail-Rekursion vorgenommen hat, also schaue ich noch einmal nach.
PS: Studierende, die SICP gelesen haben, können auf einen Blick erkennen, dass es sich bei diesem Programm tatsächlich um ein Beispiel aus Kapitel 1 von SICP handelt.

7) Clevere Python-Programmierer:

fib=lambda n,x=0,y=1:x if not n else f(n-1,y,x+y)
Nach dem Login kopieren

Erklärung:
Grundlegende Logik und die oben genannten Beispiele sind die Das Gleiche, alles in rekursiver Weise geschrieben. Der Hauptunterschied besteht darin, dass die von Python bereitgestellten Standardparameter und der ternäre Operator verwendet werden, wodurch der Code auf eine Zeile vereinfacht wird. Was die Standardparameter betrifft, wissen alle Studenten, die C++ studiert haben, diese Dinge, und C# 4.0 hat diese Dinge auch eingeführt.

8) Python-Programmierer, die gerade die lineare Algebra abgeschlossen haben:

def fib(n):
 def m1(a,b):
  m=[[],[]]
  m[0].append(a[0][0]*b[0][0]+a[0][1]*b[1][0])
  m[0].append(a[0][0]*b[0][1]+a[0][1]*b[1][1])
  m[1].append(a[1][0]*b[0][0]+a[1][1]*b[1][0])
  m[1].append(a[1][0]*b[1][0]+a[1][1]*b[1][1])
  return m
 def m2(a,b):
  m=[]
  m.append(a[0][0]*b[0][0]+a[0][1]*b[1][0])
  m.append(a[1][0]*b[0][0]+a[1][1]*b[1][0])
  return m
 return m2(reduce(m1,[[[0,1],[1,1]] for i in range(n)]),[[0],[1]])[0]
Nach dem Login kopieren

Erklärung:
Dieser Code ist es nicht So klar wie der vorherige Code, also stellen wir zunächst das Prinzip vor (erfordert ein wenig Kenntnisse der linearen Algebra):
Schauen Sie sich zunächst die vorherige iterative Version der Fibonacci-Funktion an. Es ist leicht festzustellen, dass es eine Transformation gibt: y ->x , x+y->y. Aus einem anderen Blickwinkel ist es [x,y]->[y,x+y].
Hier deklariere ich einen binären Vektor [x,y]T, der durch eine Transformation [y,x+y]T erhält. Es kann leicht erhalten werden, dass die Transformationsmatrix [[1,0] ist. [1, 1]], das heißt: [[1,0],[1,1]]*[x,y]T=[y,x+y]T
Die Binärmatrix A= [[1, 0],[1,1]], binärer Vektor x=[0,1]T, es ist leicht zu erkennen, dass das Ergebnis von Ax der nächste Fibonacci-Wert ist, das heißt:
Ax=[ fib(1),fib(2) ]T
hat auch:
Ax=[fib(2),fib(3)]T
………………
Analog dazu haben wir kann erhalten:

Aⁿx=[fib(n),fib(n-1)]T
Nach dem Login kopieren

Das heißt, Sie können n A-Transformationen für den binären Vektor [0,1]T durchführen, um ihn zu erhalten [fib(n),fib(n +1)]T, wodurch fib(n) erhalten wird.

Hier definiere ich eine binäre Matrixmultiplikationsfunktion m1 und eine Transformation m2 für einen binären Vektor und verwende dann die Reduktionsoperation, um eine kontinuierliche Multiplikationsoperation abzuschließen, um Aⁿx zu erhalten und schließlich fib (n ).

9) Python-Programmierer, die sich auf die Teilnahme am ACM-Wettbewerb vorbereiten:

 def fib(n):
 lhm=[[0,1],[1,1]]
 rhm=[[0],[1]]
 em=[[1,0],[0,1]]
 #multiply two matrixes
 def matrix_mul(lhm,rhm):
  #initialize an empty matrix filled with zero
  result=[[0 for i in range(len(rhm[0]))] for j in range(len(rhm))]
  #multiply loop
  for i in range(len(lhm)):
   for j in range(len(rhm[0])):
    for k in range(len(rhm)):
     result[i][j]+=lhm[i][k]*rhm[k][j]
  return result
 
 def matrix_square(mat):
  return matrix_mul(mat,mat)
 #quick transform
 def fib_iter(mat,n):
  if not n:
   return em
  elif(n%2):
   return matrix_mul(mat,fib_iter(mat,n-1))
  else:
   return matrix_square(fib_iter(mat,n/2))
 return matrix_mul(fib_iter(lhm,n),rhm)[0][0]
Nach dem Login kopieren

Anleitung:

看过上一个fib函数就比较容易理解这一个版本了,这个版本同样采用了二元变换的方式求fib(n)。不过区别在于这个版本的复杂度是lgn,而上一个版本则是线性的。

这个版本的不同之处在于,它定义了一个矩阵的快速求幂操作fib_iter,原理很简单,可以类比自然数的快速求幂方法,所以这里就不多说了。

PS:虽然说是ACM版本,不过说实话我从来没参加过那玩意,毕竟自己算法太水了,那玩意又太高端……只能在这里YY一下鸟~

python中,最基本的那种递归(如下fib1)效率太低了,只要n数字大了运算时间就会很长;而通过将计算的指保存到一个dict中,后面计算时直接拿来使用,这种方式成为备忘(memo),如下面的fib2函数所示,则会发现效率大大提高。

在n=10以内时,fib1和fab2运行时间都很短看不出差异,但当n=40时,就太明显了,fib1运行花了35秒,fab2运行只花费了0.00001秒。
n=40时,输出如下:

jay@jay-linux:~/workspace/python.git/py2014$ python fibonacci.py 
2014-10-16 16:28:35.176396
fib1(40)=102334155
2014-10-16 16:29:10.479953
fib2(40)=102334155
2014-10-16 16:29:10.480035
Nach dem Login kopieren

这两个计算Fibonacci数列的函数,如下:https://github.com/smilejay/python/blob/master/py2014/fibonacci.py

import datetime

def fib1(n):
  if n == 0:
    return 0
  elif n == 1:
    return 1
  else:
    return fib1(n - 1) + fib1(n - 2)
 
known = {0: 0, 1: 1}
 
def fib2(n):
  if n in known:
    return known[n]
 
  res = fib2(n - 1) + fib2(n - 2)
  known[n] = res
  return res

if __name__ == &#39;__main__&#39;:
  n = 40
  print(datetime.datetime.now())
  print(&#39;fib1(%d)=%d&#39; % (n, fib1(n)))
  print(datetime.datetime.now())
  print(&#39;fib2(%d)=%d&#39; % (n, fib2(n)))
  print(datetime.datetime.now())
Nach dem Login kopieren

后记:

由于刚学习Python没多久,所以对其各种特性的掌握还不够熟练。与其说是我在用Python写程序,倒不如说我是在用C,C++,C#或是Scheme来写程序。至于传说中的Pythonic way,我现在还没有什么体会,毕竟还没用Python写过什么真正的程序。
Learning Python和Core Python都是不错的Python入门书籍,前者更适合没有编程基础的人阅读。
Python是最好的初学编程入门语言,没有之一。所以它可以取代Scheme成为MIT的计算机编程入门语言。

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Fibonacci-Funktion mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Muss MySQL bezahlen? Muss MySQL bezahlen? Apr 08, 2025 pm 05:36 PM

MySQL hat eine kostenlose Community -Version und eine kostenpflichtige Enterprise -Version. Die Community -Version kann kostenlos verwendet und geändert werden, die Unterstützung ist jedoch begrenzt und für Anwendungen mit geringen Stabilitätsanforderungen und starken technischen Funktionen geeignet. Die Enterprise Edition bietet umfassende kommerzielle Unterstützung für Anwendungen, die eine stabile, zuverlässige Hochleistungsdatenbank erfordern und bereit sind, Unterstützung zu bezahlen. Zu den Faktoren, die bei der Auswahl einer Version berücksichtigt werden, gehören Kritikalität, Budgetierung und technische Fähigkeiten von Anwendungen. Es gibt keine perfekte Option, nur die am besten geeignete Option, und Sie müssen die spezifische Situation sorgfältig auswählen.

So verwenden Sie MySQL nach der Installation So verwenden Sie MySQL nach der Installation Apr 08, 2025 am 11:48 AM

Der Artikel führt den Betrieb der MySQL -Datenbank vor. Zunächst müssen Sie einen MySQL -Client wie MySQLworkBench oder Befehlszeilen -Client installieren. 1. Verwenden Sie den Befehl mySQL-uroot-P, um eine Verbindung zum Server herzustellen und sich mit dem Stammkonto-Passwort anzumelden. 2. Verwenden Sie die Erstellung von Createdatabase, um eine Datenbank zu erstellen, und verwenden Sie eine Datenbank aus. 3.. Verwenden Sie CreateTable, um eine Tabelle zu erstellen, Felder und Datentypen zu definieren. 4. Verwenden Sie InsertInto, um Daten einzulegen, Daten abzufragen, Daten nach Aktualisierung zu aktualisieren und Daten nach Löschen zu löschen. Nur indem Sie diese Schritte beherrschen, lernen, mit gemeinsamen Problemen umzugehen und die Datenbankleistung zu optimieren, können Sie MySQL effizient verwenden.

MySQL kann nach dem Herunterladen nicht installiert werden MySQL kann nach dem Herunterladen nicht installiert werden Apr 08, 2025 am 11:24 AM

Die Hauptgründe für den Fehler bei MySQL -Installationsfehlern sind: 1. Erlaubnisprobleme, Sie müssen als Administrator ausgeführt oder den Sudo -Befehl verwenden. 2. Die Abhängigkeiten fehlen, und Sie müssen relevante Entwicklungspakete installieren. 3. Portkonflikte müssen Sie das Programm schließen, das Port 3306 einnimmt, oder die Konfigurationsdatei ändern. 4. Das Installationspaket ist beschädigt. Sie müssen die Integrität herunterladen und überprüfen. 5. Die Umgebungsvariable ist falsch konfiguriert und die Umgebungsvariablen müssen korrekt entsprechend dem Betriebssystem konfiguriert werden. Lösen Sie diese Probleme und überprüfen Sie jeden Schritt sorgfältig, um MySQL erfolgreich zu installieren.

Die MySQL -Download -Datei ist beschädigt und kann nicht installiert werden. Reparaturlösung Die MySQL -Download -Datei ist beschädigt und kann nicht installiert werden. Reparaturlösung Apr 08, 2025 am 11:21 AM

Die MySQL -Download -Datei ist beschädigt. Was soll ich tun? Wenn Sie MySQL herunterladen, können Sie die Korruption der Datei begegnen. Es ist heutzutage wirklich nicht einfach! In diesem Artikel wird darüber gesprochen, wie dieses Problem gelöst werden kann, damit jeder Umwege vermeiden kann. Nach dem Lesen können Sie nicht nur das beschädigte MySQL -Installationspaket reparieren, sondern auch ein tieferes Verständnis des Download- und Installationsprozesses haben, um zu vermeiden, dass Sie in Zukunft stecken bleiben. Lassen Sie uns zunächst darüber sprechen, warum das Herunterladen von Dateien beschädigt wird. Dafür gibt es viele Gründe. Netzwerkprobleme sind der Schuldige. Unterbrechung des Download -Prozesses und der Instabilität im Netzwerk kann zu einer Korruption von Dateien führen. Es gibt auch das Problem mit der Download -Quelle selbst. Die Serverdatei selbst ist gebrochen und natürlich auch unterbrochen, wenn Sie sie herunterladen. Darüber hinaus kann das übermäßige "leidenschaftliche" Scannen einer Antiviren -Software auch zu einer Beschädigung von Dateien führen. Diagnoseproblem: Stellen Sie fest, ob die Datei wirklich beschädigt ist

Lösungen für den Dienst, der nach der MySQL -Installation nicht gestartet werden kann Lösungen für den Dienst, der nach der MySQL -Installation nicht gestartet werden kann Apr 08, 2025 am 11:18 AM

MySQL hat sich geweigert, anzufangen? Nicht in Panik, lass es uns ausprobieren! Viele Freunde stellten fest, dass der Service nach der Installation von MySQL nicht begonnen werden konnte, und sie waren so ängstlich! Mach dir keine Sorgen, dieser Artikel wird dich dazu bringen, ruhig damit umzugehen und den Mastermind dahinter herauszufinden! Nachdem Sie es gelesen haben, können Sie dieses Problem nicht nur lösen, sondern auch Ihr Verständnis von MySQL -Diensten und Ihren Ideen zur Fehlerbehebungsproblemen verbessern und zu einem leistungsstärkeren Datenbankadministrator werden! Der MySQL -Dienst startete nicht und es gibt viele Gründe, von einfachen Konfigurationsfehlern bis hin zu komplexen Systemproblemen. Beginnen wir mit den häufigsten Aspekten. Grundkenntnisse: Eine kurze Beschreibung des Service -Startup -Prozesses MySQL Service Startup. Einfach ausgedrückt, lädt das Betriebssystem MySQL-bezogene Dateien und startet dann den MySQL-Daemon. Dies beinhaltet die Konfiguration

So optimieren Sie die Datenbankleistung nach der MySQL -Installation So optimieren Sie die Datenbankleistung nach der MySQL -Installation Apr 08, 2025 am 11:36 AM

Die MySQL -Leistungsoptimierung muss von drei Aspekten beginnen: Installationskonfiguration, Indexierung und Abfrageoptimierung, Überwachung und Abstimmung. 1. Nach der Installation müssen Sie die my.cnf -Datei entsprechend der Serverkonfiguration anpassen, z. 2. Erstellen Sie einen geeigneten Index, um übermäßige Indizes zu vermeiden und Abfrageanweisungen zu optimieren, z. B. den Befehl Erklärung zur Analyse des Ausführungsplans; 3. Verwenden Sie das eigene Überwachungstool von MySQL (ShowProcessList, Showstatus), um die Datenbankgesundheit zu überwachen und die Datenbank regelmäßig zu sichern und zu organisieren. Nur durch kontinuierliche Optimierung dieser Schritte kann die Leistung der MySQL -Datenbank verbessert werden.

Wie optimieren Sie die MySQL-Leistung für Hochlastanwendungen? Wie optimieren Sie die MySQL-Leistung für Hochlastanwendungen? Apr 08, 2025 pm 06:03 PM

Die MySQL-Datenbankleistung Optimierungshandbuch In ressourcenintensiven Anwendungen spielt die MySQL-Datenbank eine entscheidende Rolle und ist für die Verwaltung massiver Transaktionen verantwortlich. Mit der Erweiterung der Anwendung werden jedoch die Datenbankleistung Engpässe häufig zu einer Einschränkung. In diesem Artikel werden eine Reihe effektiver Strategien zur Leistungsoptimierung von MySQL -Leistung untersucht, um sicherzustellen, dass Ihre Anwendung unter hohen Lasten effizient und reaktionsschnell bleibt. Wir werden tatsächliche Fälle kombinieren, um eingehende Schlüsseltechnologien wie Indexierung, Abfrageoptimierung, Datenbankdesign und Caching zu erklären. 1. Das Design der Datenbankarchitektur und die optimierte Datenbankarchitektur sind der Eckpfeiler der MySQL -Leistungsoptimierung. Hier sind einige Kernprinzipien: Die Auswahl des richtigen Datentyps und die Auswahl des kleinsten Datentyps, der den Anforderungen entspricht, kann nicht nur Speicherplatz speichern, sondern auch die Datenverarbeitungsgeschwindigkeit verbessern.

Braucht MySQL das Internet? Braucht MySQL das Internet? Apr 08, 2025 pm 02:18 PM

MySQL kann ohne Netzwerkverbindungen für die grundlegende Datenspeicherung und -verwaltung ausgeführt werden. Für die Interaktion mit anderen Systemen, Remotezugriff oder Verwendung erweiterte Funktionen wie Replikation und Clustering ist jedoch eine Netzwerkverbindung erforderlich. Darüber hinaus sind Sicherheitsmaßnahmen (wie Firewalls), Leistungsoptimierung (Wählen Sie die richtige Netzwerkverbindung) und die Datensicherung für die Verbindung zum Internet von entscheidender Bedeutung.

See all articles