1. 程式人生 > >Python——遞歸、二分查找算法

Python——遞歸、二分查找算法

find print 調用 ret 深度 出發 star 二分 fin

遞歸函數

1. 遞歸

(1)什麽是遞歸:在函數中調用自身函數
(2)最大遞歸深度:默認997/998——是Python從內存角度出發做的限制

n = 0
def story():
    global n
    n+= 1
    print(n)
    story()     #997/998
story()

(3)修改最大深度:最好不要改——遞歸次數太多,則不適合用遞歸解決問題

import sys
sys.setrecursionlimit(2000) #1997/1998

2. 遞歸的優點

  會讓代碼變簡單

3. 遞歸的缺點

  占用內存

4. 能看懂遞歸

# 算年齡

def age(n):
    
if n == 4: return 40 elif n>0 and n<4: return age(n+1) + 2 print(age(1)) # 學著看遞歸 ‘‘‘ def age(1): #46 if 1 == 4: return 40 elif 1>0 and 1<4: return age(2) + 2 #44+2 = 46 def age(2): #44 if 2 == 4: return 40 elif 2>0 and 2<4: return age(3) + 2 #42+2 = 44 def age(3): #42 if 3 == 4: return 40 elif 3>0 and 3<4: return age(4) + 2 #40+2 = 42 def age(4): #40 if 4 == 4: return 40 elif 4>0 and 4<4: return age(4+1) + 2
‘‘‘

5. 應用場景

6. 初識遞歸

7. 算法——二分查找算法(必須有序排列)

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,82,83,88]
def find(l,aim,start = 0,end=None):
    end = len(l) if end is None else end
    mid_index = (end - start) // 2 + start  #計算中簡值
    if start <= end:
        if l[mid_index] < aim:
            l[mid_index 
+ 1:] return find(l, aim, start=mid_index + 1, end=end) elif l[mid_index] > aim: return find(l, aim, start=start, end=mid_index - 1) else: return mid_index # print(‘找到了‘, mid_index, aim) else: return 找不到這個值啊 ret1 = find(l,67) ret2 = find(l,64) print(ret1) #找到了 18 print(ret2) #找不到這個值啊

8. 三級菜單——遞歸實現

Python——遞歸、二分查找算法