2017-05-18 30 views
0

我有在Python蟒蛇回报没有,而不是真/假

使用二进制搜索

计划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 

为什么会这样呢?

+0

几天前我回答了同样的问题!必须来自同一本教科书! – d9ngle

+3

你在程序2中有'return' – haifzhan

+0

'return'只返回调用栈上一级的值。如果你想发送多个函数调用的值,每个函数都需要显式返回值。 – user2357112

回答

0

在你的程序1,只有当列表为空或您是在列表的中间搜索的价值,它会回报你布尔值,那是因为你明确地说return如果len(alist)==0return True当遇到if (alist[mid]==x): ,你必须做同样的休息条件,以及

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 

当你调用递归的方法bin(),并期望一个布尔值,你必须在上面添加强调回报线条。