📅  最后修改于: 2023-12-03 15:41:58.044000             🧑  作者: Mango
递归是一种算法和程序设计的技巧,可以简化复杂问题的解决方式。在计算机科学中,递归程序是一种调用自身的函数或子程序。递归程序可以用于解决一些需要重复计算的问题,如求n个整数的最大公约数(GCD)。
以下是一个简单的递归程序,用于计算n个整数的最大公约数。
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
def ngcd(arr, n):
if n == 1:
return arr[0]
else:
return gcd(arr[n-1], ngcd(arr, n-1))
上述程序定义了两个函数,一个为求两个整数 a 和 b 的最大公约数的 gcd
函数,一个为求 n 个整数的最大公约数的函数 ngcd
。
gcd
函数用到了递归的思想,如果 b 等于 0 ,则 a 就是最大公约数;否则利用 取模运算%
获取 a 除以 b 的余数,再递归调用 gcd 函数,直到 b 等于 0。ngcd
函数同样利用了递归,如果 n 等于 1,则数组中的第一个元素就是最大公约数;否则取数组的最后一个数字,计算它和前面 n-1 个数字的最大公约数,递归调用 ngcd 函数,直到 n 等于 1。在 ngcd
函数中,首先判断 n 的值是否等于 1,如果是,则返回 arr[0],也就是数组中的第一个元素,此时已找到 n 个整数中的最大公约数;否则,递归调用自身,将 arr 数组的 长度减1,并将除去最后一个元素的子数组传入调用。
现在我们使用一个数据集测试我们的 ngcd 函数。考虑一组有 7 个整数的数组:[5, 10, 15, 25, 30, 60, 90],我们期望的输出结果是 5.
arr = [5, 10, 15, 25, 30, 60, 90]
n = len(arr)
print("GCD is:", ngcd(arr, n))
输出结果如下:
GCD is: 5
本例程序可以用来求解任意个整数的最大公约数,在原理上是基于递归的,因此函数实现更具有可读性和易于理解性。