定义:
1、在一个函数里再调用这个函数本身、
2、有明确的结束条件
递归函数的最大深度
1、理论上,官方文档说明是1000
2、实际测试是998
检测方法:
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
3、最大深度可以修改,修改命令:
import sys
sys.setrecursionlimit(10000000) # 修改递归的最大层次
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
递归的应用:
#递归遍历目录下所有文件
import os
def read(filepath, n):
files = os.listdir(filepath) # 获取到当前文件夹中的所有文件
for fi in files: # 遍历文件夹中的文件, 这里获取的只是本层文件名
fi_d = os.path.join(filepath,fi) # 加入文件夹 获取到文件夹+文件
if os.path.isdir(fi_d): # 如果该路径下的文件是文件夹
print("\t"*n, fi)
read(fi_d, n+1) # 继续进行相同的操作
else:
print("\t"*n, fi) # 递归出来. 最终在这里隐含着return
read('../python_s14/', 0)
# 二分查找
def search(num,l,start=None,end=None):
start = start if start else 0
end = end if end else len(l) - 1
mid = (end - start)//2 + start
if start > end:
return None
elif l[mid] > num :
return search(num,l,start,mid-1)
elif l[mid] < num:
return search(num,l,mid+1,end)
elif l[mid] == num:
return mid
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
print(search(66,l))
#递归实现三级菜单
def threeLM(dic):
while True:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key
elif key in dic.keys() and dic[key]:
ret = threeLM(dic[key])
if ret == 'q': return 'q'
threeLM(menu)