📅  最后修改于: 2023-12-03 15:15:03.846000             🧑  作者: Mango
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数列,下面介绍其中一种基于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数列时需要谨防递归深度过深造成栈溢出。