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通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
python写入已存在的excel数据实例
May 03 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
Python实现12306火车票抢票系统
Jul 04 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Python爬虫基础讲解之请求
May 13 Python
解析目标检测之IoU
Jun 26 Python
Python中rapidjson参数校验实现
Jul 25 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 中文字符串首字母的获取函数分享
2013/11/04 PHP
php无限遍历目录示例
2014/02/21 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Python中的exec、eval使用实例
2014/09/23 Python
python生成器表达式和列表解析
2016/03/10 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
从python读取sql的实例方法
2020/07/21 Python
pytorch简介
2020/11/11 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
《要下雨了》教学反思
2014/02/17 职场文书
英语专业求职信
2014/07/08 职场文书
会计岗位职责
2015/02/03 职场文书
纪检监察立案决定书
2015/06/24 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang