1、递归的概念。
函数调用自身的行为。
在函数内部可以调用其它可见函数,也是可以调用自身。
\
\
以上例子说明,超过了Python规定递归的最大深度。Python3出于善意的保护,给它报错了。Python3对于默认递归的设置是100层。
\
写网络爬虫工具设置递归的深度,通过import sys这个模块来设置:
\
2、递归必须满足哪两个条件?
1)函数调用自身
2)设置了正确的返回条件
\
3、根据递归的特性,编程中使用递归的例子。
汉诺塔游戏
使用递归算法解答这个游戏比迭代好理解很多。
\
树结构的定义
对于树结构使用递归来定义会比普通方式定义方便很多。
\
谢尔宾斯三角形
这是个递归组成图案。
\
递归自拍
\
4、递归求阶层
\
非递归版本
1)桌面建立一个文件。
\
2)定义一个函数,求多少个数的递归,那么就传一个参数。
\
结果:
\
递归版本:
\
结果:
\
详细分析:
如果传入的是5,因为5不等于1,所以会执行else ,return 5 乘以factorial(4),也就是n-1,就会调用factorial,也就是4,4不等于1,所以会执行4乘以factotial(3),也就是5乘以4乘以factorial(3),阶乘式是1乘以2乘以3,结果为120。
\
\
\
5、递归本质
递归的实现是自己调用自身,每次函数的调用都需要进行压栈,弹栈、保存和恢复寄存器的栈操作,所以在这上边是非常消耗时间和空间的。
如果递归忘记返回,或者错误的设置了返回条件,那么执行这样的递归代码就会变成一个无底洞,只进不出。
\
6、递归的优缺点
优点:
把规模大的问题转变成规模小的问题组合,从而简化问题的解决难度。
有些问题使用递归,代码简洁易懂。
\
缺点:
递归原理是函数调用自身,所以大量使用函数本身空间和时间消耗。
容易错误设置返回条件,导致递归代码无休止调用。栈溢出,程序崩溃。
\
本文分享自微信公众号 - 清菡软件测试(qinghanTester)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。