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抓取模板之家的CSS模板
Mar 16 Python
详解Python中的__new__()方法的使用
Apr 09 Python
Python中datetime常用时间处理方法
Jun 15 Python
Python在图片中添加文字的两种方法
Apr 29 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
Python实现线程状态监测简单示例
Mar 28 Python
利用pandas读取中文数据集的方法
Jul 25 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
使用Python实现分别输出每个数组
Dec 06 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 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
杏林同学录(六)
2006/10/09 PHP
PHP 上传文件大小限制
2009/07/05 PHP
php5 图片验证码实现代码
2009/12/11 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
javascript的事件描述
2006/09/08 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python实现flappy bird游戏
2018/12/24 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
基于Python实现天天酷跑功能
2021/01/06 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
美国渔具店:FishUSA
2019/08/07 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
十佳班主任事迹材料
2014/01/18 职场文书
实习护士自荐信
2014/06/21 职场文书
争先创优演讲稿
2014/09/15 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
初中语文教学反思范文
2016/03/03 职场文书