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