2017-05-18 1 views
0

내가 파이썬 반환 없음/

파이썬

에서 프로그램 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)) 

프로그램 출력 :

None 
None 

프로그램 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)) 

프로그램 출력 :

False 
True 

왜 그렇습니까? 명시 적으로 말을하기 때문에 프로그램 1에서

+0

나는 며칠 전에 같은 질문에 답했다! 동일한 교과서에서 온 것이어야합니다! – d9ngle

+3

프로그램에'return'이 있습니다. – haifzhan

+0

'return'은 호출 스택의 한 레벨 위로 값만 리턴합니다. 값을 여러 함수 호출로 보내려면 각 함수가 값을 명시 적으로 '반환'해야합니다. – user2357112

답변

0

는 목록이 비어 있거나 할 때 목록의 중간에 검색하는 값은, 당신은 부울 값, 그 수익의 것 returnif (alist[mid]==x):을 충족 할 때 len(alist)==0 경우와 return True , 당신은뿐만 아니라 당신이 재귀 bin() 메소드를 호출하고 부울 값을 예상 할 때

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 

, 당신은 라인을 강조 위의 수익을 추가해야 나머지 조건에 대해 동일한 작업을 수행해야합니다.