📜  递归程序为n个整数的GCD打印公式(1)

📅  最后修改于: 2023-12-03 15:41:58.044000             🧑  作者: Mango

递归程序求n个整数的GCD

递归是一种算法和程序设计的技巧,可以简化复杂问题的解决方式。在计算机科学中,递归程序是一种调用自身的函数或子程序。递归程序可以用于解决一些需要重复计算的问题,如求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

本例程序可以用来求解任意个整数的最大公约数,在原理上是基于递归的,因此函数实现更具有可读性和易于理解性。