2017-05-18 3 views
0

Ich habe zwei Programme für die in Python mit binären Suche SuchePython Rückkehr keine statt True/False

Programm 1:

def bin(alist,x): 
    if len(alist)==0: 
     return False 
    else: 
     mid=len(alist)//2 
     if (alist[mid]==x): 
      return True 
     else: 
      if alist[mid] < x: 
       #print(alist[mid+1:],x) 
       bin(alist[mid+1:],x) 
      else: 
       #print(alist[:mid],x) 
       bin(alist[:mid],x) 

print (bin([2,3,5,8,9],8)) 
print (bin([2,3,5,8,9],7)) 

Programmausgabe:

None 
None 

Programm 2:

def bin(alist,x): 
    if len(alist)==0: 
     return False 
    else: 
     mid=len(alist)//2 
     if (alist[mid]==x): 
      return True 
     else: 
      if alist[mid]<x: 
       return bin(alist[mid+1:],x) 
      else: 
       return bin(alist[:mid],x) 
print(bin([1,5,7,8,9],10)) 
print(bin([1,4,5,8,9],8)) 

Programm Ausgabe:

False 
True 

Warum ist es so?

+0

Ich beantwortete die gleiche Frage vor ein paar Tagen! Muss aus dem gleichen Lehrbuch stammen! – d9ngle

+3

Sie haben 'return' in Ihrem Programm 2 – haifzhan

+0

' return' gibt nur den Wert eine Ebene nach oben der Call-Stack. Wenn Sie den Wert mehrere Funktionsaufrufe senden möchten, muss jede Funktion den Wert explizit zurückgeben. – user2357112

Antwort

0

In Ihrem Programm 1, nur dann, wenn die Liste leer ist oder der Wert, den Sie der Liste in der Mitte suchen, es würde kehren Sie Booleschen Wert, das ist, weil Sie explizit return sagen, wenn len(alist)==0 und return True wenn es if (alist[mid]==x): trifft , müssen Sie auch

def bin(alist,x): 
    if len(alist)==0: 
     return False 
    else: 
     mid=len(alist)//2 
     if (alist[mid]==x): 
      return True 
     else: 
      if alist[mid] < x: 
       #print(alist[mid+1:],x) 
       bin(alist[mid+1:],x) # -------> return 
      else: 
       #print(alist[:mid],x) 
       bin(alist[:mid],x) # -------> return 

das gleiche gilt für die übrigen Bedingungen tun, wenn Sie Ihre bin() Methode rekursiv und erwarten einen booleschen Wert aufrufen, müssen Sie Rückkehr in den obigen Zeilen hinzufügen markiert.