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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM