深入Python(5):递归
来源:互联网 发布:mysql front怎么用 编辑:程序博客网 时间:2024/04/30 19:51
如果函数包含了对其自身的调用,该函数就是递归的。如下:
"""非递归方式呈现"""sum = 0for obj in range(1,101): sum+=objprint sum""""1+2+3+...+100"""def foo(n): if n>0:return n+foo(n-1) if n<=0:return 0print foo(100)"""阶乘"""def fac(n): if n==0 or n==1: return 1 else: return n*fac(n-1)print fac(10)
注意:
如果在使用递归的时候,出现条件判断,一定要把所有可能出现的条件都进行相应的处理。例如累加,如果写成这样:
""""1+2+3+...+100"""def foo(n): if n>0:return n+foo(n-1)print foo(100)
则会出错,可能有人会说,我只要满足条件就执行,不满足就不执行,但是不要忘了,如果一个Python函数被设计成不返回任何东西,它会返回None。出错如下:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in foo
File "<stdin>", line 2, in foo
...
File "<stdin>", line 2, in foo
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
这里插入一些关于递归的网方解释,因为我是从网上搜到的这些内容:
(1)递归就是在过程或函数里调用自身;
(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(比如Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(比如树的遍历,图的搜索)递归的缺点:递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
参考:http://www.cnblogs.com/balian/archive/2011/02/11/1951054.html
- 深入Python(5):递归
- 深入理解python递归函数:汉诺塔游戏
- 深入递归
- 深入理解Python中的模块、包、递归和正则表达式
- Python递归
- Python递归
- python递归
- Python | 递归
- Python 递归
- python 递归
- 深入理解递归
- 深入理解递归函数
- 深入理解递归算法
- 深入理解递归
- 深入解析递归算法
- 深入理解递归算法
- 深入探究递归神经网络
- 3. 深入理解递归
- Python 模块学习:os模块
- 计算1024的阶乘结果有多少个0
- [LeetCode] Binary Tree Level Order Traversal II
- action的配置详解
- GUI简单设计一
- 深入Python(5):递归
- ueditor编辑文章时候,复制粘贴内容,原来的图片不能显示
- unity_eclipse
- GUI简单设计二
- 深入Python(5):random与range
- 新辰:网站排名浮动不前 相比竞争者到底缺少了什么?
- 【webservice】如何发布axis2的webservice服务端
- 标准输入、输出和错误和文件重定向
- 200条装修小常识