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列表与元组详解实例
Nov 01 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
Python的Flask框架中web表单的教程
Apr 20 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
Python加载带有注释的Json文件实例
May 23 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
从python读取sql的实例方法
Jul 21 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
python如何使用腾讯云发送短信
Sep 17 Python
Python基础之数据类型知识汇总
May 18 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 socket(fsockopen)的应用实例分析
2013/06/02 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
详解JS预解析原理
2020/06/16 Javascript
python人人网登录应用实例
2014/09/26 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
详解Python中的正则表达式
2018/07/08 Python
python实现简单flappy bird
2018/12/24 Python
用pycharm开发django项目示例代码
2019/06/13 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
python中常见错误及解决方法
2020/06/21 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
市场部业务员岗位职责
2014/04/02 职场文书
优秀员工推荐信
2014/05/10 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
1000字打架检讨书
2014/11/03 职场文书
2015公司年度工作总结
2015/05/14 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
利用JavaScript写一个简单计算器
2021/11/27 Javascript
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers