python基础:递归函数返回值(return)误区

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)

posted @ 2017-06-02 15:33  古怪的一阵风  阅读(7731)  评论(0编辑  收藏  举报