递归函数的定义:在一个函数体内,调用自身的函数。
def test():
print('HELLO')
test() # 函数体内调用自身函数
以上代码:产生一个递归错误信息:涉及到递归函数的安全阈值,超出这个阈值就报错
def story():
print("HELLO")
story()
story()
# RecursionError: maximum recursion depth exceeded while calling a Python object
# 递归错误,超过了递归的最大深度,请勿改变这个安全阈值
可以修改这个安全阈值,但是不建议修改,因为会阈值越高,占用内存越大
# 测试最大深度
n = 0
def story():
global n
n += 1
print(n)
story()
story()
# 修改递归的最大深度
import sys
sys.setrecursionlimit(10000) # 设置递归的最大深度,值与PC硬件有关
n = 0
def story():
global n
n += 1
print(n)
story()
story()
既然不推荐修改递归的安全阈值,那么递归有什么作用呢?
# 递归的缺点: 占用内存,在调用递归函数的时候,会不停的在函数名内存空间里继续嵌套一个同名的内存空间
# 递归的优点: 简化代码,即会让代码变简单
那么在什么时候才会想到用递归函数呢?
# 当你求解一个问题的时候,但这个问题不能直接得到一个答案来求解,需要通过另外一个结果来求解,但另外一个结果获取答案的方式和开头时一样的
不理解?那么就看看实际的例子吧!
# 用递归函数实现 算出年龄
# alex 多大?
# alex 比 egon大两岁
# egon 多大?
# egon比wusir大两岁
# wusir 多大?
# wusir 比金老板大两岁
# 金老板多大?
# 金老板40了
先看看笔者自己的思路,因为是也是初学,只能现学现用,也许思路不对,局限性大,仅供参考,有异议欢迎提出。
# 用递归实现以下功能
# alex 多大? alex = ?
# alex 比 egon大两岁 alex = egon+2
# egon 多大? egon = ?
# egon比wusir大两岁 egon = wusir + 2
# wusir 多大? wusir = ?
# wusir 比金老板大两岁 wusir = 金老板 + 2
# 金老板多大? 金老板 = ?
# 金老板40了 金老板 = 40
# 我自己的思路
def age(name):
king = 40
if name == 'king':
return king
elif name == 'wusir':
return king + 2
elif name == 'egon':
return age('wusir') + 2
elif name == 'alex':
return age('egon') + 2
who = input("你要查谁的年龄 alex的?egon的? wusir的?还是king的?")
who_age = age(who)
print(who,'的年龄是',who_age)
print(age('alex'))
print(age('egon'))
print(age('wusir'))
print(age('king'))
呵呵,写的不咋滴吧!那么就看看我看视频后的,虽然不是自己写的,但是我加上了自己的理解。(教你如何看懂递归函数)
# 视频答案解说
# 用递归实现以下功能
# alex 多大? 第一次问 x=1
# alex 比 egon大两岁 age(1) = age(2)+2 = age(x+1)+2
# egon 多大? 第二次问 x=2
# egon比wusir大两岁 age(2) = age(3)+2 = age(x+1)+2
# wusir 多大? 第三次问 x=3
# wusir 比金老板大两岁 age(3) = age(4)+2 = age(x+1)+2
# 金老板多大? 第四次问 x=4
# 金老板40了 age(4)=40
# 解析: 递和归
# 递:将问题一个一个往下传递,直到获得最终答案
# 归:将最终答案一个一个往上回归,直到回归到最初的问题中
#定义函数
def age(x):
if x == 4:
return 40
elif x>0 and x<4:
return age(x+1)+2
print(age(1))
# 代码解析:
# 当age(1)时 开始调用函数
def age(1):
if 1 == 4:
return 40
elif 1>0 and 1 < 4:
return age(1+1)+2 # 先执行1+1 = 2 然后age(2)就开始调用函数age(),+2起到任何作用,此时x=2 回归:age(1) = age(2)+1
def age(2):
if 2 == 4:
return 40
elif 2>0 and 2 < 4:
return age(2+1)+2 # 先执行2+1 = 3然后age(3)就开始调用函数age(),+2起到任何作用,此时x=3 回归:age(2) = age(3)+2
def age(3):
if 3 == 4:
return 40
elif 3>0 and 3 < 4:
return age(3+1)+2 # 先执行3+1 = 2 然后age(4)就开始调用函数age(),+2起到任何作用,此时x=4 回归:age(3)=age(4)+2
def age(4):
if 4 ==4:
return 40 # 条件成立 返回一个值为 40 ,即age(4) = 40, 将age(4)=40 一个一个往上回归
递归函数,对递归两个字的解析
# 解析: 递和归
# 递:将问题一个一个往下传递,直到获得最终答案
# 归:将最终答案一个一个往上回归,直到回归到最初的问题中