📜  fibbonacci (1)

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

Fibonacci介绍

什么是Fibonacci

Fibonacci数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、…… 在数学上,它是以递归的方法来定义的:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n>=2,n∈N*)。

Fibonacci的应用场景

Fibonacci数列在计算机领域中有许多应用场景,下面列举几个例子:

  • 动态规划算法:诸如斐波那契数列、背包问题、最长公共子序列等问题都能使用动态规划算法求解,其中斐波那契数列就是典型的例子。

  • 黄金分割:黄金分割是数学中的一个名词,指的是把一根线段分成两部分,在比例上较大的一段线段的长度与较小的一段线段的长度之比等于整个线段长度与较大的一段线段长度之比。黄金分割点即把线段分割的点,即两部分线段长度之比。而黄金分割点的值就是 Fibonacci 数列的极限之一,即当n趋近于无穷大时,F(n)除以F(n-1)的极限值为黄金分割点,约为 1.6180339887。

  • 游戏开发:Fibonacci数列的变种与游戏开发经常有关联,比如黑白键盘配对问题,其中手游《红叶传说》中色块填充等游戏都会涉及到 Fibonacci 数列的变种问题。

Fibonacci的编程实现

使用递归的方式来实现Fibonacci数列的计算:

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

使用迭代的方式来实现Fibonacci数列的计算:

def fibonacci(n):
    if n <= 1:
        return n
    else:
        a, b = 0, 1
        for i in range(2, n+1):
            c = a + b
            a = b
            b = c
        return b
Fibonacci的性能分析

使用递归的方式来实现Fibonacci数列的计算,存在重复计算的问题,每个数字都要重复的计算一遍,时间复杂度为O(2^n)。

使用迭代的方式来实现Fibonacci数列的计算,避免了重复计算的问题,时间复杂度为O(n)。

总体上,优先使用迭代的方式实现 Fibonacci 数列。