📜  GCD和斐波那契数(1)

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

GCD和斐波那契数

GCD

GCD(最大公约数)指的是两个或多个整数共有约数中最大的一个。在程序开发中,经常需要求两个或多个数的最大公约数,GCD是一个非常常用的算法。

实现
def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
时间复杂度

这个算法的时间复杂度是 $O(log(max(a, b)))$,其中 $a$ 和 $b$ 是两个输入的数字。

斐波那契数

斐波那契数列是一个非常著名的数学问题,它的定义如下:

  • 第 $1$ 项为 $1$。
  • 第 $2$ 项为 $1$。
  • 第 $n$ 项为第 $n-1$ 项和第 $n-2$ 项的和。
实现

一般来说,我们使用递归来实现斐波那契数列。但是,递归结果会非常的慢,因为它不断地重复计算相同的值。比较好的方式是使用动态规划。

递归实现

def fibonacci_recursion(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci_recursion(n-1) + fibonacci_recursion(n-2)

动态规划实现

def fibonacci_dp(n):
    dp = [0] * (n+1)
    dp[1] = 1
    dp[2] = 1
    for i in range(3, n+1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[n]
时间复杂度

递归实现斐波那契数列的时间复杂度是 $O(2^n)$,而动态规划的时间复杂度是 $O(n)$。

结语

GCD和斐波那契数是程序员非常常用的数学问题,掌握后可以在编程中得心应手。