Tutorial Python-Funktion: Python rekursive Funktion Parse binären Suchalgorithmus

Dieser Artikel stellt die nächste Python rekursive Funktion Parse binären Suchalgorithmus, Code der Papierprobe im Detail beschrieben, hat einen bestimmten Referenzwert für uns alle des Lernens ein Freund in der Not kann zu lernen oder zu arbeiten, beziehen sich auf
eine anfängliche rekursive

Rekursive Funktion: in einem Funktionsaufruf an die Funktion selbst.

Maximale Tiefe von Rekursion: 998

Wie Sie gerade gesehen haben, ist eine rekursive Funktion wird nicht umgesetzt wurden, wenn die äußere Kraft blockiert. Aber wie wir vor Fragen über den Funktionsaufruf gesagt haben, wird jeder Funktionsaufruf einen Raum von seinen eigenen Namen hat, wenn Sie sie nennen gewesen, würde einen Namensraum schaffen zu viele Speicherprobleme nehmen, so um dieses Phänomen Python zu stoppen , gezwungen, die rekursive Schichten der Kontrolle in der 997 (solange 997! Sie einen Nachteil kann man nicht kaufen, nicht kaufen täuschen ...).

Was ist, dass dieser „theoretisch 998“ mean zu beweisen? Hier können wir ein Experiment:

def foo(n):
  print(n)
  n += 1
  foo(n)
foo(1)

Daraus können wir das sehen können, bevor das Maximum sehen Nummer nicht in der Lage gegeben wird, ist 998. Natürlich ist der Standardwert von 997 ein Python-Programm unseres Gedächtnis des Satzes zu optimieren, natürlich, wir können es auch durch einige Mittel ändern:

import sys
print(sys.setrecursionlimit(100000))

Wir können die maximale Tiefe der Rekursion auf diese Weise ändern, werden wir nur erlauben Python Rekursionstiefe 10w eingestellt ist, in Bezug auf die Tiefe, die abhängig von der tatsächlichen Leistung des Computers erreicht werden kann. Aber wir nicht noch empfehlen diese Standard Rekursionstiefe zu ändern, weil, wenn das Problem mit rekursiven Schicht 997 löst nicht entweder ist nicht geeignet für den Einsatz Rekursion zu lösen entweder schreiben Sie den Code saugt ~ ~ ~

Sehen Sie hier, können Sie feststellen, was Rekursion ist auch nicht eine gute Sache, es ist besser, während Wahre leicht, es zu benutzen! Allerdings ist diese Verbreitung dieses Wort auf Flüssen und Seen genannt: Menschen den Zyklus zu verstehen, verstehen Gott Rekursion. So können Sie nicht underestimate rekursive Funktion haben viele Menschen außerhalb der Schwelle des Großen Gott von so vielen Jahren gestoppt worden ist, wird es nicht die wahre Bedeutung der Rekursion verstehen zu können. Und dann werden wir viele Algorithmen und rekursive Beziehung studieren. Komm, ich habe nur gelernt, die Hauptstadt zu verachten!

Zweitens, um das rekursive Beispiel zu erklären ,
hier müssen wir ein Beispiel geben Rekursion zu illustrieren tun können.

Beispiel eins:

Jetzt fragen Sie mich, alex Lehrer, wie alt? Ich sagte, ich Ihnen nicht sagen hat, aber alex zwei Jahre älter als egon.

Alex Sie wollen wissen, wie viel Sie fragen müssen, ist nicht EGON? egon sagen, ich Ihnen nicht sagen, Sir, aber ich zwei Jahre älter bestreiten.

Sie Wu Herr fragte, nein, mein Herr Wu sagte Ihnen, er sagte, er war zwei Jahre älter als Bai.

Dann fragen Sie Bai, Bai sagte Ihnen, er 18 ein.

Dieses Mal , wenn Sie nicht wissen? alex viel? Hier hat Bild einfügen Beschreibung
Warum können Sie das wissen?

Zunächst einmal, Sie sind nicht alex Alter zu fragen, fanden die Ergebnisse egon, Wu Herr, Bai, eins nach dem anderen Kind fragte man in der Vergangenheit wurde eine definitive Antwort zu bekommen, dann entlang dieser Linie zurück, bevor sie endgültig alex erhalten des Alters. Dieser Prozess wurde die Idee der Rekursion sehr nahe. Wir kommen zu mir gesagt, Gesetz zwischen diesen Menschen zu analysieren.

age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 40

Dass eine solche Situation, eine Funktion, wie wir es schreiben?

def age(n):
  if n == 1:
    return 40
  else:
    return age(n-1)+2
print(age(4))

Wenn es eine solche Liste ist können Sie den Speicherort aus der Liste der 66 zu finden, wie würden Sie tun?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83 88]
Sie sagen, so einfach!

l.index (66) ...

Der Grund, warum wir durch Index-Methode finden können, weil der Python uns zu helfen, eine Lookup-Methode zu erreichen. Wenn ist Index-Methode nicht für Sie zu nutzen. . . Sie werden feststellen, dass 66 oder?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
i = 0
for num in l:
  if num == 66:
    print(i)
  i+=1

Das obige Verfahren zu erreichen, ein 66 zu finden, wo die Lage aus einer Liste.

Aber wir diese Zahl finden ist nun, wie ah? Diese Liste zirkuliert nicht, eins nach dem anderen, es zu finden? Wenn unsere Liste besonders lang ist, die Hunderttausende die Zahl nimmt, dann finden wir eine Reihe, wenn Pech ist nicht Hunderttausende von mal zu vergleichen? Diese Effizienz zu niedrig ist, haben wir eine neue Art und Weise zu denken.

Binäre Suchalgorithmus

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83 88]
Sie auf dieser Liste sehen, ist es nicht eine kleine bis große Art geordnete Liste oder ?

Wenn ja, wenn ich für eine Zahl größer als die Zahl in der Mitte der Liste bin auf der Suche, ist es nicht direkt mit mir auf der Linie nach der Hälfte der Liste? Hier hat Bild einfügen Beschreibung
Dies ist der binäre Suchalgorithmus!

Also sollten wir den Code auf implementieren, wie es zu erreichen?

Einfache Dichotomie Version

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def func(l,aim):
  mid = (len(l)-1)//2
  if l:
    if aim > l[mid]:
      func(l[mid+1:],aim)
    elif aim < l[mid]:
      func(l[:mid],aim)
    elif aim == l[mid]:
      print("bingo",mid)
  else:
    print('找不到')
func(l,66)
func(l,6)

Eine aktualisierte Version von Dichotomie

l1 = [1, 2, 4, 5, 7, 9]
def two_search(l,aim,start=0,end=None):
  end = len(l)-1 if end is None else end
  mid_index = (end - start) // 2 + start
  if end >= start:
    if aim > l[mid_index]:
      return two_search(l,aim,start=mid_index+1,end=end)
    elif aim < l[mid_index]:
      return two_search(l,aim,start=start,end=mid_index-1)
 
    elif aim == l[mid_index]:
      return mid_index
    else:
      return '没有此值'
  else:
    return '没有此值'
print(two_search(l1,9))

Schließlich haben wir ein sehr breiten Python Lern Sammeln von Ressourcen empfehlen, [click to enter] , hier meine Sammlung ist vor der Erfahrung lernen, Studie stellt fest, gibt es eine Chance von Business - Erfahrung ist, und auf Null auf der Grundlage von Informationen zu Projekt Kampf beruhigt wir an der Unterseite können, hinterlassen Sie eine Nachricht, weiß nicht , nach vorn zu bringen, werden wir Fortschritte studieren zusammen

Veröffentlicht 24 Originalarbeiten · erntete Lob 38 · Ansichten 20000 +

Ich denke du magst

Origin blog.csdn.net/haoxun10/article/details/104761438
Empfohlen
Rangfolge