Python递归函数定义与用法示例


Posted in Python onJune 02, 2017

本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下:

递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:

fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n

所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
于是,fact(n)用递归的方式写出来就是:

def fact(n):
if n==1:
return 1
return n * fact(n - 1)

上面就是一个递归函数。可以试试:

>>> fact(1)
1
>>> fact(5)
120
>>> fact(100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L

如果我们计算fact(5),可以根据函数定义看到计算过程如下:

===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。

def digui(n):
  sum = 0
  if n<=0:
    return 1
  else:
    return n*digui(n-1)
print(digui(5))

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
python list转矩阵的实例讲解
Aug 04 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
如何使用python操作vmware
Jul 27 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
Python pip install如何修改默认下载路径
Apr 29 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 #Python
Python 爬虫图片简单实现
Jun 01 #Python
Python 通过URL打开图片实例详解
Jun 01 #Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 #Python
python 内置函数filter
Jun 01 #Python
python读取二进制mnist实例详解
May 31 #Python
Python算术运算符实例详解
May 31 #Python
You might like
简单采集了yahoo的一些数据
2007/02/14 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
js DOM模型操作
2009/12/28 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python实现备份目录的方法
2015/08/03 Python
python实现用户管理系统
2018/01/10 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
python实现字典嵌套列表取值
2019/12/16 Python
Python 如何批量更新已安装的库
2020/05/26 Python
虚拟机下载python是否需要联网
2020/07/27 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
自荐信范文
2013/12/10 职场文书
购房意向书范本
2014/04/01 职场文书
听课评语大全
2014/04/30 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
2014年店长工作总结
2014/11/17 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python