return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),
默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值
2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None
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)
View Code
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)