python基础:递归函数返回值(return)误区
return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),
默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值
2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import time 2 def binary_search(data,find_n): 3 Len=len(data) 4 if Len==1: 5 if data[0]==find_n: 6 #print("找到,在第%d个" %(1)) 7 return 1 8 else: 9 #print("没找到") 10 return 0 11 elif Len==2: 12 if data[0]==find_n: 13 #print("找到,在第%d个" %(1)) 14 return 1 15 elif data[1]==find_n: 16 #print("找到,在第%d个" %(2)) 17 return 1 18 else: 19 #print("没找到") 20 return 0 21 else: 22 mid_n=int(Len/2) 23 mid_val=data[mid_n] 24 if mid_val==find_n: 25 #print("找到,在第%d个" %(mid_n+1)) 26 return 1 27 elif mid_val<find_n: 28 right_val=data[mid_n:] 29 return binary_search(right_val,find_n) 30 else: 31 left_val=data[:mid_n] 32 return binary_search(left_val,find_n) 33 34 def split_data(n): 35 start=0 36 stop=1000 37 flag=1 38 Len=n 39 while flag: 40 if Len>1000: 41 data=[x for x in range(start,stop,1)] 42 yield data 43 start=start+1000 44 stop=stop+1000 45 Len=Len-1000 46 else: 47 data=[x for x in range(start,n,1)] 48 yield data 49 flag=0 50 51 52 if __name__=="__main__": 53 t0=time.time() 54 for data in split_data(10000000000000): 55 f=binary_search(data,999999999) 56 #print(f) 57 if f: 58 print("已找到") 59 break 60 t1=time.time()-t0 61 print(t1)
elif mid_val<find_n:
right_val=data[mid_n:]
return binary_search(right_val,find_n)
else:
left_val=data[:mid_n]
return binary_search(left_val,find_n)