递归函数

您所在的位置:网站首页 递归函数必须有结束条件吗 递归函数

递归函数

2022-08-18 15:57| 来源: 网络整理| 查看: 265

递归函数的定义:在一个函数体内,调用自身的函数。

注意:只要写了递归函数,必须要有结束条件,并不建议在函数体内进行递归函数的加减乘除,数值大的话会特别慢,如:递归函数例子

返回值:不要只看到return就认为已经返回了。要看返回操作是在递归到第几层的时候发生的,然后返回给了谁,如果不是返回给最外层函数,调用者就接受不到。需要再分析,看如何把结果返回回来。

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 x0 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 一个一个往上回归

递归函数,对递归两个字的解析

# 解析: 递和归 # 递:将问题一个一个往下传递,直到获得最终答案 # 归:将最终答案一个一个往上回归,直到回归到最初的问题中

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3