python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~
点击上方的“小小白AI”,选择“关注”
重磅知识,第一时间送达
前言
直入主题~~~
1、什么是递归函数
前面深入介绍了如何创建和调用函数。你知道,函数可调用其他函数,但可能让你感到惊讶的是,函数还可调用自己。如果你以前没有遇到这种情况,可能想知道递归是什么意思。简单地说,递归意味着引用(这里是调用)自身。
2、python递归函数
下面是一个递归式函数定义:
def recursion():
return recursion()
这个定义显然什么都没有做,与刚才的“递归”定义一样傻。如果你运行它,结果将如何呢?你将发现运行一段时间后,这个程序崩溃了(引发异常)。从理论上说,这个程序将不断运行下去,但每次调用函数时,都将消耗一些内存。因此函数调用次数达到一定的程度(且之前的函数调用未返回)后,将耗尽所有的内存空间,导致程序终止并显示错误消息“超过大递归深度”
你想要的是能对你有所帮助的递归函 数,这样的递归函数通常包含下面两部分。
基线条件(针对小的问题):满足这种条件时函数将直接返回一个值。
递归条件:包含一个或多个调用,这些调用旨在解决问题的一部分。
这里的关键是,通过将问题分解为较小的部分,可避免递归没完没了,因为问题终将被分解成基线条件可以解决的小问题。
3、python递归函数
那么如何让函数调用自身呢?这没有看起来那么难懂。前面说过,每次调用函数时,都将为此创建一个新的命名空间。这意味着函数调用自身时,是两个不同的函数[更准确地说,是不同版本(即命名空间不同)的同一个函数]在交流。
经典案例1,计算数字n的阶乘。n的阶乘为n × (n-1)× (n-2) ×… × 1,在数学领域的用途非常广泛。
可使用循环。这种实现可行,而且直截了当。
deffactorial(n):
result = n
for i in range(1, n):
result *= i
return result
下面来考虑如何使用函数来实现这个定义。理解这个定义后,实现起来其实非常简单。 def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n -1)
这是前述定义的直接实现,只是别忘了函数调用factorial(n)和factorial(n–1)是不同的 实体。
经典案例2、计算一个数幂,就像内置函数pow和运算符**所做的那样。要定义一个数字的整数次幂,有多种方式,但先来看一个简单的定义:power(x, n)(x的n次幂)是将数字x自乘n - 1次的结果,即将n个x相乘的结果。换而言之,power(2, 3)是2自乘两次的结果,即2 × 2 × 2 = 8。
这实现起来很容易。
def power(x, n):
result = 1
for i in range(n):
result *= x
return result 这是一个非常简单的小型函数,但也可将定义修改成递归式的。
对于任何数字x,power(x, 0)都为1。n>0时,power(x, n)为power(x,n-1)与x的乘积。这种定义提供的结果与更简单的迭代定义完全相同。理解定义是难的,而实现起来很容易。
def power(x, n):
if n == 0:
return1
else:
return x* power(x, n - 1)
4、为什么要使用递归函数
大多数情况下,使用循环的效率可能更高。然而,在很多情况下,使用递归的可读性更高,且有时要高得多,在你理解了函数的递归式定义时尤其如此。另外,虽然你完全能够避免编写递归函数,但作为程序员,你必须能够读懂其他人编写的递归算法和函数。always remember you should coding~~~
参考文献:
[1]Beginning Python From Novice to Professional (Third Edition),
Magnus Lie Hetland.
希望上述内容能够帮助到正在学习的你~
python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~相关推荐
- python中multiple函数_关于多处理:在Python中将多个参数传递给pool.map()函数
本问题已经有最佳答案,请猛点这里访问. 我需要一些方法来使用pool.map()中接受多个参数的函数.根据我的理解,pool.map()的目标函数只能有一个iterable作为参数,但是有没有其他参数 ...
- python中 1.34e3_Python快速编程入门——第2章 Python基础语法
第2章 python基础语法 一.基本语法 二.变量和数据类型 三.标识符和关键字 四.简单数值类型 一.基本语法 注释:Python的注释是用# 不像C/C++使用的是//或者/*/.多行注释好像挺 ...
- python中until函数_等待应用程序窗口:python中的pywinauto.timings.WaitUntilPasses
我试图在pywinauto中使用waituntilpasses来给应用程序时间打开一个新窗口.我已使用SWAPY识别窗口详细信息. 为了进行测试,我手动打开了子窗口,因此WaitUntilPasses ...
- python中调用音乐_调用咪咕音乐api的python命令行音乐下载器
说明: 1.调用咪咕音乐api进行音乐下载(暂不支持批量) 2.使用自行安装import的库 效果: 源码: [Python] 纯文本查看 复制代码import requestsimport urll ...
- python中排序从小到大_面试官:如何用Python实现三个整数从小到大排序?
概述 今天主要分享一个三树排序的实例,大家可以自己测试玩一下~ 需求 输入三个整数x,y,z,请把这三个数由小到大输出. 方法一:如果是要练练手就随便找个排序算法实现一下 #usr/bin/pytho ...
- python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)
在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...
- python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...
神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...
- python中获取文件大小_如何在Python中获取文件大小
python中获取文件大小 We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小. Python中的 ...
- python中匹配函数_正则表达式以匹配函数名和Python中的所有参数
假设我有一个字符串,如下所示:"func(arg1, arg2, arg3, arg4, ..., argn)" 编辑:此函数不是用某种特定语言编写的.它只有这种格式.如果这样做更 ...
- python中输入字符串_简单讲解Python中的字符串与字符串的输入输出
简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...
最新文章
- Python——字符串大小写转化
- java接口的定义及使用细节
- Java Swing 皮肤
- Bootstrap3.1开发的响应式个人简历模板
- 简单快捷方法:CAJ 文件转 成PDF文件
- xface 远程桌面 无法使用tab键盘
- 不同品牌发电机组间的并机知识
- 光盘刻录只允许读取不能拷贝_便携易用,读写强劲:ORICO外置刻录光驱体验
- 安川机器人如何备份_YASKAWA机器人视觉局域网设置参考
- 15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
- CSS定位设置实例——盒子的定位
- shp格式文件出带审图号的地图
- Linux虚拟机中安装vim(超详细)
- juk互粉攻略set结构体
- stn算子_STN 口袋指南
- 限速之令牌桶和漏桶算法
- Elasticsearch Ingest-Attachment
- 【ospf-vlink虚拟连接】
- 对软件项目开发的一点思考
- 计算机相关扩展活动战队名字,2020最新战队名字大全
热门文章
- 手机web禁止微信调整字体
- HashSet、LinkedHashSet、TreeSet
- Qt3D学习之键盘交互
- 利用iTextSharp组件给PDF文档添加图片水印,文字水印
- python中文decode和encode转码
- 香港学计算机,香港求学计算机专业集锦
- android studio dns问题_Android网络优化篇-从DNS开始
- 织梦++高级搜索php,织梦高级搜索页面advancedsearch.php调用自定义字段
- RabbitMQ修改默认端口:4369、5672、15672、25672
- Python自动化必会技能-Excel文件读取