Heim > Backend-Entwicklung > Python-Tutorial > Rekursion und Generator der Python-Funktion

Rekursion und Generator der Python-Funktion

高洛峰
Freigeben: 2017-03-03 15:08:49
Original
1401 Leute haben es durchsucht

1. Was ist Rekursion

Wenn eine Funktion einen Aufruf an sich selbst enthält, ist die Funktion rekursiv. Als Algorithmus wird in Programmiersprachen häufig ein großes und komplexes Problem in ein kleineres Problem umgewandelt, das dem ursprünglichen Problem ähnelt. Die rekursive Strategie kann mit nur wenigen Programmen beschrieben werden Die zur Lösung des Problems erforderlichen Codes reduzieren die Codemenge im Programm erheblich. Um beispielsweise das Produkt von 9-stelligen Zahlen von 1 bis 9 zu berechnen, lautet der intuitive Algorithmus 1*2*3*4*5*6*7*8*9. Wenn Sie das Produkt von 1-10000 berechnen möchten Der intuitive Algorithmus ist schwierig zu implementieren und die Rekursion kann leicht implementiert werden. Bitte sehen Sie sich das Beispiel an:

def fact(n):#计算给定数字到一的乘积
   if n<=1:
     return 1
   else:
     return n * fact(n-1) 
print (fact(7))
Nach dem Login kopieren

Das Ergebnis ist: 5040

Lassen Sie uns den rekursiven Ausführungsprozess anhand eines Beispiels sehen :

def calc(n):
   print(n)
   if n/2 > 1:
     res = calc(n/2)
   return n
 calc(8)
Nach dem Login kopieren

Das Ergebnis ist:

8
4.0
2.0
Nach dem Login kopieren

Sehen Sie sich dieses Beispiel noch einmal an:

def calc(n):
  print(n)
  if n/2 > 1:
    res = calc(n/2)
    print(&#39;res:&#39;,res)
  print("N:",n)
  return n
calc(8)
Nach dem Login kopieren

Das Ergebnis ist:

8
4.0
2.0
N: 2.0
res: 2.0
N: 4.0
res: 4.0
N: 8
Nach dem Login kopieren

2. Generator

Der Generator ist ein Generator mit eine Ertragsaussagefunktion. Eine Funktion oder Unterroutine kehrt nur einmal zurück, aber ein Generator kann die Ausführung anhalten und ein Zwischenergebnis zurückgeben, einen Wert an den Aufrufer zurückgeben und die Ausführung anhalten. Wenn die next()-Methode des Generators aufgerufen wird, wird sie genau dort fortgesetzt, wo sie aufgehört hat

Sehen Sie sich das folgende Beispiel an:

def func():
  print(&#39;11111111&#39;)
  yield [1]
  print(2222222222)
  yield 2
  print(3333333333)
  yield 3

ret=func()
r1=ret.__next__()
print(r1)
r2=ret.__next__()
print(r2)
r3=ret.__next__()
print(r3)
Nach dem Login kopieren

Das Ergebnis ist:

11111111
[1]
2222222222
2
3333333333
3
Nach dem Login kopieren

Da die for-Schleife von Python einen next()-Aufruf und die Verarbeitung von StopIteration hat, verwenden Sie ein A for Schleife anstelle der manuellen Iteration durch einen Generator (oder Iterator dieser Sache) ist immer viel sauberer und hübscher. Beispiel:

def func():
  print(&#39;11111111&#39;)
  yield [1]
  print(2222222222)
  yield 2
  print(3333333333)
  yield 3
ret=func()
for i in ret:
  print(i)
Nach dem Login kopieren

Das Ergebnis ist das gleiche wie zuvor.

Diese einfachen Beispiele sollen Ihnen eine kleine Vorstellung davon geben, wie Generatoren funktionieren. Zusätzlich zu next() zum Abrufen des nächsten generierten Werts können Benutzer Werte an den Generator zurücksenden [send()], Ausnahmen im Generator auslösen und den Generator zum Beenden auffordern [close()]

Nachfolgend finden Sie ein einfaches Beispiel, das diese Funktionen demonstriert.

def counter(start_at=0):
  count = start_at
  while True:
    val = (yield count) if val is not None:
    count = val
  else:
    count += 1
Nach dem Login kopieren

Der Generator verfügt über einen Anfangswert, der bei jedem Aufruf des Generators [next()] um 1 hochgezählt wird. Benutzer haben die Möglichkeit, diesen Wert zurückzusetzen, wenn sie wirklich send() mit dem neuen Wert aufrufen möchten, anstatt next() aufzurufen. Dieser Generator läuft ewig. Wenn Sie ihn also beenden möchten, rufen Sie die Methode close() auf. Wenn wir diesen Code interaktiv ausführen, erhalten wir die folgende Ausgabe:

>>> count = counter(5)
>>> count.next()
5
>>> count.next()
6
>>> count.send(9)
9
>>> count.next()
10
>>> count.close()
>>> count.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Nach dem Login kopieren

Der obige Artikel befasst sich mit einem detaillierten Verständnis der Rekursion und Generatoren von Python-Funktionen Ich habe Ihnen den gesamten Inhalt gegeben, ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.

Weitere Artikel zum Thema Rekursion und Generatoren von Python-Funktionen finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage