1. 程式人生 > >Python之初識遞迴

Python之初識遞迴

什麼是遞迴

  在函式中呼叫函式本身,就是遞迴,當然不能無限制呼叫,呼叫深度為997,想要修改遞迴深度,用sys模組

import sys
sys.setrecursionlimit(100000)  # 修改深度為100000,具體到多少得看及計算機效能

斐波那契數列

# 函式形式的斐波那契數列(長度20)
def func(n):
    if n==1 or n ==2:
        return  1
    return func(n-1)+func(n-2)

ret = func(20)
print(ret)
# 堆疊形式的斐波那契數列(長度20)
l = []
for i in
range(20): if i==0 or i==1: l.append(1) else: l.append(l[i-1]+l[i-2]) print(l[19])

二分查詢演算法

l = [1, 2, 3, 4, 5, 6, 7, 8, 22, 33, 44, 55, 66, 77, 87, 96, 99]
def func(l,s,start=0,end=None):
    end = len(l) if end is None else end
    mid = (end-start)//2+start
    if start>end:
        
return '沒有這個元素' else: if s>l[mid]: return func(l,s,start=mid+1,end=end) elif s<l[mid]: return func(l,s,start=start,end=mid-1) elif s==l[mid]: return '找到了,在第%s個位置'%mid ret = func(l,66) print(ret)

三級選單

menu = {
    '
山西':{ '太原':{ '小店區':{}, '尖草坪區':{} }, '運城':{ '鹽湖區':{}, '新絳縣':{} }, '大同':{} }, '上海':{ '明珠':{ '廣場':{}, '雪花啤酒':{} }, '東方':{} }, '山東':{ '青島':{ '青島啤酒':{}, '海灘':{} }, '日照':{ '沙灘':{} } } } # 遞迴函式形式的三級選單 def threeMenu(menu): while True: for i in menu.keys():print(i) k = input('請選擇城市:') if k=='b' or k=='q':return k elif k in menu.keys() and menu[k]: ret = threeMenu(menu[k]) if ret =='q': return 'q' elif (not menu.get(k)) or (not menu[k]): continue threeMenu(menu) # 堆疊形式的三級選單 l = [menu] while l: for i in l[-1].keys():print(i) key = input('請輸入:').strip() if key in l[-1].keys() and l[-1][key]:l.append(l[-1][key]) if key=='b': l.pop() if key=='q': break
三級選單