📜  fibo 与 for 循环 python (1)

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

介绍Python中的Fibonacci数列和for循环

Fibonacci数列是什么?

Fibonacci数列是一个经典的数列,其定义如下:

$$ F_{n} = \begin{cases} 0 & \text{如果 } n = 0 \ 1 & \text{如果 } n = 1 \ F_{n-1} + F_{n-2} & \text{如果 } n > 1 \end{cases} $$

换句话说,Fibonacci数列由0和1开始,后面的每一项都是前面两项的和。例如,前6项Fibonacci数列为:0, 1, 1, 2, 3, 5。

在Python中如何计算Fibonacci数列?

Python中有多种方法来计算Fibonacci数列,下面介绍其中一种基于for循环的方法:

def fibonacci(n):
    fib = [0, 1]
    if n <= 2:
        return fib[:n]
    for i in range(2, n):
        fib.append(fib[-1] + fib[-2])
    return fib

print(fibonacci(10))   # 输出前10个Fibonacci数:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

这个方法的基本思路是,先预设Fibonacci数列的前两个数(即0和1),然后从第三项开始,通过for循环依次计算并添加到列表中。

改进算法

这个简单的算法性能并不是特别高。在计算高阶项的Fibonacci数列时,程序的运行速度会非常慢。

下面介绍一种将时间复杂度从O(n)优化到O(log n)的算法:

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

这个方法使用递归算法实现,虽然看起来更加简单,但是在计算高阶项的Fibonacci数列时会比前面的方法更快。

结论

无论使用哪种方法来计算Fibonacci数列,都需要用到for循环。使用递归算法计算高阶项的Fibonacci数列时需要谨防递归深度过深造成栈溢出。