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编程中用close()方法关闭文件的教程
May 24 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
Python Lambda函数使用总结详解
Dec 11 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
Python 统计序列中元素的出现频度
Apr 26 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
js简单网速测试方法完整实例
2015/12/15 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
python使用cPickle模块序列化实例
2014/09/25 Python
Python最基本的输入输出详解
2015/04/25 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python装饰器简单用法实例小结
2018/12/03 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
软件测试面试题
2014/01/05 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
专科毕业生自我鉴定
2013/12/01 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript