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下进行UDP网络编程的教程
Apr 29 Python
20个常用Python运维库和模块
Feb 12 Python
python数据封装json格式数据
Mar 04 Python
pandas object格式转float64格式的方法
Apr 10 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
python入门之算法学习
Apr 22 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
项目经理任命书内容
2014/06/06 职场文书
升学宴家长致辞
2015/07/27 职场文书
事业单位岗位说明书
2015/10/08 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
使用python绘制横竖条形图
2022/04/21 Python