欢迎来到Introzo百科
Introzo百科
Python 递归
在本教程中,您将学习创建递归函数(调用自身的函数)。
什么是递归?
递归是根据事物本身来定义事物的过程。
一个物理世界的例子是将两个平行的镜子面对面放置。它们之间的任何对象都将被递归地反映。
Python 递归函数
在Python中,我们知道一个函数可以调用其他函数。该函数甚至可以调用自身。这些类型的构造称为递归函数。
下图显示了称为 recurse
的递归函数的工作原理。
以下是查找整数阶乘的递归函数的示例。
数字的阶乘是从 1 到该数字的所有整数的乘积。例如,阶乘 6(表示为 6!)为 1*2*3*4*5*6 = 720
。
递归函数示例
定义阶乘(x):
"""这是一个递归函数
求一个整数的阶乘"""
如果 x == 1:
返回1
别的:
返回 (x * 阶乘(x-1))
数量 = 3
print("阶乘", num, "是",阶乘(num))
输出
3 的阶乘是 6
在上面的示例中,factorial()
是一个调用自身的递归函数。
当我们用一个正整数调用这个函数时,它会通过减少数字来递归地调用自己。
每个函数将一个数字乘以它下面的数字的阶乘,直到等于 1。可以通过以下步骤解释此递归调用。
factorial(3) # 第一次调用 3
3 * Factorial(2) # 第二次调用 2
3 * 2 * Factorial(1) # 第三次调用 1
3 * 2 * 1 # 从第三次调用返回,编号=1
3 * 2 # 从第二次调用返回
6 # 从第一次通话返回
让我们看一下显示所发生事件的逐步过程的图像:
当数字减至 1 时,递归结束。这称为基本条件。
每个递归函数都必须有一个停止递归的基本条件,否则函数会无限调用自身。
Python 解释器限制递归深度,以帮助避免无限递归,无限递归可能导致堆栈溢出。
默认情况下,最大递归深度为1000
。如果超出限制,将导致RecursionError
。让我们看一个这样的情况。
def recursor():
递归()
递归()
输出
回溯(最近一次调用最后一次):
文件“”,第 3 行,位于
文件“”,第 2 行,在
文件“”,第 2 行,在
文件“”,第 2 行,在
[上一行又重复了 996 次]
RecursionError:超出最大递归深度
递归的优点
- 递归函数让代码看起来简洁明了。
- 您可以使用递归将复杂的任务分解为更简单的子问题。
- 使用递归生成序列比使用嵌套更容易。
递归的缺点
- 有时,递归背后的逻辑很难理解。
- 递归调用成本高昂(效率低下),因为它们占用大量内存和时间。
- 递归函数很难调试。
相关文章
- 10-07 Java多线程系列
- 10-07 Java多线程系列
- 10-07 Java多线程系列
- 10-07 对应tensorflow+keras+python
- 10-07 AD层切换操作技巧分享及注意事项
- 10-07 “需要Ninja加载C++扩展”解决方案
- 10-07 未来!微软推送Windows 11 Build 2
- 10-07 Windows 11 最新预览版来了!我们来看看更
- 10-07 Windows 11/Windows 10更新更过
- 10-07 模块七:微服务监控报警Prometheus架构与实
- 10-07 实际使用Prometheus搭建监控系统
- 10-07 golang prometheus包的使用
- 10-07 让微信如虎添翼的神器!这即将起飞!
- 10-07 梦回Windows XP,微软Win10/Win1
- 10-07 微软Win8多个早期概念设计曝光:全新开始屏幕、任
- 10-07 Excel单元格内容不完整?教你如何一键完成
- 10-07 为什么有HTTP协议,还有websocket协议
- 10-07 由于核心隔离(VBS),微软Win11最新更新将禁
- 10-07 在线文档服务商SurDoc获得IDG 400万美元
- 10-07 多玩人人等网站用户数据泄露可能会造成连锁反应
- 最近发表