题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1. 方法一:普通循环
思路 :利用循环计算每一项的值,并累加求和。
优点 :实现简单,易于理解。
缺点 :计算速度稍慢,当计算量较大时效率低下。
代码实现:
python
def sum_sequence(n):
a, b = 2, 1
s = 0
for i in range(n):
s += a / b
a, b = a + b, a
return s
print(sum_sequence(20))
2. 方法二:递归
思路 :利用递归计算每一项的值,并累加求和。
优点 :实现简单,易于理解。
缺点 :同方法一,当计算量较大时效率低下。
代码实现:
python
def fibonacci(n):
if n == 1:
return 2
if n == 2:
return 3
return fibonacci(n-1) + fibonacci(n-2)
def sum_sequence(n):
s = 0
for i in range(1, n+1):
s += fibonacci(i) / fibonacci(i-1)
return s
print(sum_sequence(20))
3. 方法三:列表推导式
思路 :利用列表推导式计算每一项的值,并累加求和。
优点 :代码简洁,易于理解,计算速度较快。
缺点 :计算量较大时,列表占用的内存空间较大。
代码实现:
python
def sum_sequence(n):
s = sum([fibonacci(i) / fibonacci(i-1) for i in range(1, n+1)])
return s
print(sum_sequence(20))
4. 方法四:生成器表达式
思路 :利用生成器表达式计算每一项的值,并累加求和。
优点 :代码简洁,易于理解,计算速度快,不占用过多内存空间。
缺点 :无法同时使用列表中的方法。
代码实现:
python
def sum_sequence(n):
s = sum(fibonacci(i) / fibonacci(i-1) for i in range(1, n+1))
return s
print(sum_sequence(20))
5. 方法五:数学公式
思路 :利用斐波那契数列的特性,直接计算前n项和。
优点 :计算速度最快。
缺点 :代码实现较复杂,适用范围有限。
代码实现:
python
import math
def sum_sequence(n):
sqrt5 = math.sqrt(5)
s = (pow((1+sqrt5)/2, n+1) - pow((1-sqrt5)/2, n+1)) / sqrt5 - 1
return s
print(sum_sequence(20))