递归函数
https://www.processon.com/(作图)
1.最大递归深度默认是997
2.可以修改递归默认深度
例:
import sys
sys.setrecursionlimit(1000)
@递归缺点;占内存
@递归优点:让代码变简单
@逐次向下调用,返回值依次向上回归
例题:
1.二分查找算法 必须处理有序的列表
l = [2,3,4,5,6,8,10,12,13,15,16,17,19,22,25,27,29,34,37]
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:
find(l,aim,start = mid_index + 1,end = end)
elif l[mid_index] > aim:
find(l,aim,start = start,end = mid_index -1)
else:
print('找到了!',mid_index,aim)
else:
print('找不到这个值!')
find(l,7)
2.三级菜单代码
3.斐波那契(从结果往前推)
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n -1) +fib(n -2) #双递归
print(fib(40))
4.阶乘
def func(n):
if n == 1: #由所传参数向向下推,推到最后的一个参数作为判断条件
return 1
return func(n-1)*n #由条件的性质可以尝试推测
print(func(8))