初识递归

130 阅读2分钟

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源创计划”,欢迎正在阅读的你也加入,一起分享。