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+Opencv识别两张相似图片
Mar 23 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
Python中format()格式输出全解
Apr 12 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
python环境下安装opencv库的方法
Mar 05 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
用python爬虫批量下载pdf的实现
Dec 01 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函数
2006/12/06 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
smarty实现多级分类的方法
2014/12/05 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Python3多线程基础知识点
2019/02/19 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
pycharm 安装JPype的教程
2019/08/08 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
深入分析python 排序
2020/08/24 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
群众路线领导班子整改方案
2014/10/25 职场文书
工程安全生产协议书
2014/11/21 职场文书
投标承诺函格式
2015/01/21 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL