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避免死锁方法实例分析
Jun 04 Python
python批量复制图片到另一个文件夹
Sep 17 Python
基于python实现学生信息管理系统
Nov 22 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
Python中else的三种使用场景
Jun 16 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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模板中出现空行解决方法
2011/03/08 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
Js nodeType 属性全面解析
2013/11/14 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python中的yield浅析
2014/06/16 Python
Python处理Excel文件实例代码
2017/06/20 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
党小组意见范文
2015/06/08 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis