欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > Python 递归

Python 递归

日期:2023-10-06 16:41

在本教程中,您将学习创建递归函数(调用自身的函数)。

什么是递归?

递归是根据事物本身来定义事物的过程。

一个物理世界的例子是将两个平行的镜子面对面放置。它们之间的任何对象都将被递归地反映。

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:超出最大递归深度

递归的优点

  1. 递归函数让代码看起来简洁明了。
  2. 您可以使用递归将复杂的任务分解为更简单的子问题。
  3. 使用递归生成序列比使用嵌套更容易。

递归的缺点

  1. 有时,递归背后的逻辑很难理解。
  2. 递归调用成本高昂(效率低下),因为它们占用大量内存和时间。
  3. 递归函数很难调试。

关灯