Python 递归
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))
输出
The factorial of 3 is 6
在上面的例子中,factorial()
是一个递归函数,因为它调用自己。
当我们用一个正整数调用这个函数时,它会通过递减数字来递归调用自己。
每个函数将数字乘以它下面的数字的阶乘,直到等于一。这个递归调用可以通过以下步骤来解释。
factorial(3) # 1st call with 3 3 * factorial(2) # 2nd call with 2 3 * 2 * factorial(1) # 3rd call with 1 3 * 2 * 1 # return from 3rd call as number=1 3 * 2 # return from 2nd call 6 # return from 1st call
让我们看一张显示正在发生的逐步过程的图像:
<图>当数字减少到 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
递归的优点
- 递归函数使代码看起来干净优雅。
- 可以使用递归将复杂的任务分解为更简单的子问题。
- 使用递归比使用一些嵌套迭代更容易生成序列。
递归的缺点
- 有时递归背后的逻辑很难理解。
- 递归调用代价高昂(效率低下),因为它们占用大量内存和时间。
- 递归函数很难调试。
Python