一、递归的定义
1.什么是递归:在一个函数里在调用这个函数本身
2.最大递归层数做了一个限制:997,但是也可以自己限制
# 验证 997
def foo(n):
print(n)
n+=1
foo(n)
foo(1)
3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)
import sys
sys.setrecursionlimit(10000000)#修改递归层数
n=0
def f():
global n
n+=1
print(n)
f()
f()
我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。
sys模块:所有和python相关的设置和方法
4.结束递归的标志:return
5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模
6.使用场景:数据的规模在减少,但是解决问题的思路没有改变
7.很多排序算法会用到递归
二、递归小应用
1.下面我们来猜一下小明的年龄
小明是新来的同学,丽丽问他多少岁了。
他说:我不告诉你,但是我比滔滔大两岁。
滔滔说:我也不告诉你,我比晓晓大两岁
晓晓说:我也不告诉你,我比小星大两岁
小星也没有告诉他说:我比小华大两岁
最后小华说,我告诉你,我今年18岁了
这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。那么代码该怎么写呢?
def age(n):
if n == 1:
return 18
else:
return age(n - 1) + 2
ret=age(6)
print(ret)
2.一个数,除2直到不能整除2
def cal(num):
if num%2==0:#先判断能不能整除
num=num//2
return cal(num)
else:
return num
print(cal(9))
3.如果一个数可以整除2,就整除,不能整除就*3+1
def func(num):
print(num)
if num==1:
return
if num%2==0:
num=num//2
else:
num=num*3+1
func(num)
func(9)
后面还有三级菜单、多级菜单以及二分查找算法等等之类的欢迎大神补充学习。