什么是递归
在函数中调用函数本身,就是递归,当然不能无限制调用,调用深度为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