斐波那契数列(Fibonacci sequence)是一个经典的数学序列,定义如下:
F(0) = 0
, F(1) = 1
F(n) = F(n-1) + F(n-2)
(n ≥ 2)目标:计算前 n
个斐波那契数的总和(即 F(0) + F(1) + ... + F(n)
)。
直接生成前 n
项并累加,时间复杂度为 O(n)
,空间复杂度为 O(1)
。
Python 示例代码:
def fibonacci_sum(n):
if n < 0:
return 0
a, b = 0, 1
total = a + b # 初始化为F(0)+F(1)
for _ in range(2, n + 1):
a, b = b, a + b
total += b
return total
# 示例:计算前10项的和(F(0)到F(9))
print(fibonacci_sum(9)) # 输出:88
斐波那契数列的前 n
项和满足性质:
Sum(F(0) + F(1) + ... + F(n)) = F(n+2) - 1
因此只需计算 F(n+2)
并减1。
Python 示例代码:
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
def fibonacci_sum_math(n):
return fibonacci(n + 2) - 1
print(fibonacci_sum_math(9)) # 输出:88
递归实现简单但效率低(时间复杂度 O(2^n)
),仅适合小规模 n
。
Python 示例代码:
def fibonacci_recursive(n):
if n <= 1:
return n
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
def fibonacci_sum_recursive(n):
return sum(fibonacci_recursive(i) for i in range(n + 1))
print(fibonacci_sum_recursive(9)) # 输出:88
n
计算慢)
原因:未优化算法。
解决:使用矩阵快速幂法(时间复杂度 O(log n)
),适合极大 n
。快速幂法示例(Python):
def matrix_mult(a, b):
return [
[a[0][0]*b[0][0] + a[0][1]*b[1][0], a[0][0]*b[0][1] + a[0][1]*b[1][1]],
[a[1][0]*b[0][0] + a[1][1]*b[1][0], a[1][0]*b[0][1] + a[1][1]*b[1][1]]
]
def matrix_pow(mat, power):
result = [[1, 0], [0, 1]] # 单位矩阵
while power > 0:
if power % 2 == 1:
result = matrix_mult(result, mat)
mat = matrix_mult(mat, mat)
power //= 2
return result
def fibonacci_fast(n):
if n == 0:
return 0
mat = [[1, 1], [1, 0]]
result = matrix_pow(mat, n - 1)
return result[0][0]
def fibonacci_sum_fast(n):
return fibonacci_fast(n + 2) - 1
print(fibonacci_sum_fast(100)) # 快速计算大n的和
n
:迭代法或数学公式法足够。n
:优先使用快速幂法。