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统计一个文本中重复行数的方法
Nov 19 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
python同步windows和linux文件
Aug 29 Python
python关于调用函数外的变量实例
Dec 26 Python
Python中if有多个条件处理方法
Feb 26 Python
Python类型转换的魔术方法详解
Dec 23 Python
Python中如何处理常见报错
Jan 18 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
PHP捕获Fatal error错误的方法
2014/06/11 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
Python中join函数简单代码示例
2018/01/09 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
QML使用Python的函数过程解析
2019/09/26 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
农民致富事迹材料
2014/01/23 职场文书
班长自荐书范文
2014/02/11 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
英文演讲稿开场白
2014/08/25 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
学习经验交流会总结
2015/11/02 职场文书
干部理论学习心得体会
2016/01/21 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书