Python 中的基本递归程序

2025年3月17日 | 阅读 7 分钟

递归是编程中解决问题的一个重要概念。每个初学者都会遇到递归,即使是有经验的开发者也会使用递归。如果你不熟悉递归,它是一个函数调用自身的机制。例如 - 放置两个相对的镜子,当有物体出现在它们之间时,它会被递归地反射。要了解更多关于递归的信息,请访问 www.javatpoint.com/recursion-in-python

在本教程中,我们将使用递归解决一些重要的 Python 问题。这将有助于加深对递归的理解以及如何着手解决问题。

让我们来看一下这些问题。

求一个数的阶乘

这是递归的一个入门级或著名问题。一个数的阶乘是通过将该数乘以 n-1 直到得到 1 来计算的。假设我们想计算 5 的阶乘,它将如下所示。

正如我们所看到的,它反复计算 n*(n-1)。因此,我们可以使用递归。这里 0 的阶乘是 1。递归的基线情况如下 -

代码如下。

示例 -

输出

Enter a number: 6
The factorial of a 6 is:  720

斐波那契数列

这是一个非常著名的数学问题,有时也会在初级职位的面试中出现。在这个数列中,数列中的每个数字都是它前面两个数字的和。该数列为 0, 1, 1, 2, 3, 5, 8, ... 等等。第一个元素是 0,第二个是 1;因此,第三个元素是第一个和第二个元素的和。假设我们想要斐波那契数列的第 6 个元素,那么它前面两个元素将是 5 和 4 -

数列 Fn 由以下递推关系定义。

以及初始值 -

让我们用 Python 代码来实现这个递推关系。

示例 -

输出

Enter a number: 7
The 7 element of fibonacci series is:  13

求前 n 个自然数的和

这是一个简单的问题,我们使用递归来求 n 个自然数的和。

示例 -

输出

Enter a number: 6
21

求一个数的幂

求一个数的幂,需要一个底数和一个指数。将一个数乘以自身,次数等于指数的值。指数写在底数的上方和右侧。每次将底数相乘时,指数都会减一。

示例 -

输出

4 to the power of 7 is: 2187 
2 to the power of 8 is: 64

求两个数的最小公倍数 (LCM)

在数学中,LCM 是两个或多个数字的最小公因子。例如 - 我们想找出 2 和 5 的公因子,那么 -

2 的倍数 → 2, 4, 6, 8, 10

5 的倍数 → 5, 10, 15, 20, 25

最小公倍数是 → 10

让我们看下面的例子 -

示例 -

输出

The least common factor is:  16.0

求两个数的最大公约数 (GCD)

它也称为最大公因子 (HCF),它是能同时整除两个给定数字的最高公因子。例如 - 假设我们要找出 a = 98 和 b = 56 的 HCF。

这里 a>b,所以我们将 a 的值减去 b,而 b 保持不变

a = a - b = 98 - 56 = 42,b = 56。现在 b>a,所以 b = b - a = 56 - 42 = 14,a = 42。42 是 14 的 3 倍,所以 HCF 是 14。

让我们用 Python 代码来实现它。

示例 -

输出

GCD of 24 and 48 is 24

汉诺塔

这是一个著名的数学谜题,有三根杆子和三个圆盘。主要任务是将整个堆栈移动到另一个杆子上,并且必须遵守以下规则 -

  • 一次只能移动一个圆盘。
  • 可以移动任意一个杆子最上面的圆盘。
  • 小圆盘不能放在大圆盘的下面。

让我们用下面的例子来解决这个代码。

示例 -

输出

Enter number of disks: 2  
Move disk 1 from rod A to rod B.  
Move disk 2 from rod A to rod C.  
Move disk 1 from rod B to rod C.  

求一个数的各位数字之和

我们也可以使用递归来解决这类问题。假设用户输入 143,则数字之和为 1+4+3 = 8。让我们来理解下面的例子。

示例 -

输出

Enter a number: 143
The sum is: 8

合并排序

归并排序算法基于分治法,是最有效的算法之一。在归并排序算法中,给定的数组被分解成多个数组,直到每个数组只包含一个元素。然后进行排序,并合并成一个单一的数组。访问我们的 Python 归并排序算法以获得详细的解释。

示例 -

输出

Input Array: 
[24, 11, 50, 27, 16, 36, 60, 91]
Sorted Array :
[11, 16, 24, 27, 36, 50, 60, 91]

帕斯卡三角形

帕斯卡三角形是一种特殊的三角形,其中每个数字是上面两个数字的和,除了边缘上的数字,它们都是 '1'。

让我们来理解以下代码。

示例 -

输出

Enter a number: 6
[1, 5, 10, 10, 5, 1]

结论

递归可以减少代码行数,但会占用更多内存。在本教程中,我们讨论了一些可以使用递归解决的简单问题。这些常见问题可能会在编程面试中出现。