Python递归
在本教程中,您将学习创建一个递归函数(一个调用自身的函数)。
什么是递归?
递归是根据自身定义某些内容的过程。
一个物理世界的例子是放置两个相互面对的平行反射镜。它们之间的任何对象都将递归地反映出来。
Python递归函数
在Python中,我们知道一个函数可以调用其他函数。函数甚至可能会自行调用。这些类型的构造称为递归函数。
下图显示了称为的递归函数的工作recurse
。

以下是查找整数的阶乘的递归函数的示例。
数字的阶乘是从1到该数字的所有整数的乘积。例如,阶乘6(表示为6!)是1 * 2 * 3 * 4 * 5 * 6 = 720。
递归函数示例
def factorial(x):
"""This is a recursive function
to find the factorial of an integer"""
if x == 1:
return 1
else:
return (x * factorial(x-1))
num = 3
print("The factorial of", num, "is", factorial(num))
运行代码
输出量
3的阶乘为6
在上面的示例中,它factorial()
是一个递归函数,它调用了自己。
当我们用正整数调用此函数时,它将通过减少数量来递归调用自身。
每个函数将数字乘以其下面的数字的阶乘,直到等于1。可以在以下步骤中解释此递归调用。
factorial(3) #第一次调用3 3 * factorial(2) #2次调用 3 * 2 *factorial(1) #1的第三个调用 3 * 2 * 1 #以号码= 1从第3次通话返回 3 * 2 #从第二次通话返回 6 #从第一次通话返回
让我们看一下显示发生了什么的逐步过程的图像:

当数字减少到1时,递归结束。这称为基本条件。
每个递归函数必须具有停止递归的基本条件,否则该函数将无限调用自身。
Python解释器限制了递归的深度,以帮助避免无限递归,从而导致堆栈溢出。
默认情况下,最大递归深度为 1000。如果超出限制,则结果为RecursionError
。让我们看一个这样的条件。
def recursor():
recursor()
recursor()
运行代码
输出量
Traceback (most recent call last): File "<string>", line 3, in <module> File "<string>", line 2, in a File "<string>", line 2, in a File "<string>", line 2, in a [Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded
递归的优点
- 递归函数使代码看起来简洁明了。
- 使用递归可以将复杂的任务分解为更简单的子问题。
- 递归比使用嵌套嵌套更容易生成序列。
递归的缺点
- 有时,递归背后的逻辑很难遵循。
- 递归调用很昂贵(效率低),因为它们占用大量内存和时间。
- 递归函数很难调试。
0