Python每日一练-DAY03
Question 3
题目
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
解题思路一
题目分析:
这道题目要求我们计算一个分数序列的前20项之和。
这个分数序列中,每一项的分子是前两项的分子之和,分母是前两项的分母之和。
例如,第三项的分子为2+3=5,分母为1+2=3,因此第三项为5/3。
我们可以使用循环来计算这个分数序列的前20项之和,具体步骤如下:
- 初始化变量a=2, b=1, sum=0,表示数列的第一项为2/1,累加和为0。
- 使用循环计算数列的后续19项,每次将a和b更新为下一项的分子和分母,同时将累加和加上这一项的值。
- 循环结束后,累加和即为数列的前20项之和。
代码实现
a, b = 2, 1
sum = 0
for i in range(20):
sum += a / b
a, b = a + b, a
print("前20项之和为:", sum)
解题思路二
题目分析: 给定的数列是斐波那契数列的一个变种,每一项是前两项的和。要求计算该数列的前20项之和。
解题思路:
- 定义一个递归函数
fibonacci(n)
,用于计算第n个斐波那契数。
- 初始化和
sum
为0。
- 使用循环从第2项开始遍历到第21项(共20项)。
- 在循环中,计算第i项和第i-1项的斐波那契数,并将结果累加到和
sum
中。
- 最后打印出和
sum
的值。
代码实现
def fibonacci(n):
if n <= 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
sum = 0
for i in range(2, 22):
a = fibonacci(i)
b = fibonacci(i-1)
sum += a/b
print(sum)
解题思路三
- 导入NumPy库。
- 定义一个2 x 2 的矩阵
matrix
,其中第一行是[1, 1],第二行是[1, 0]。
- 定义一个递归函数
matrix_power(n)
,用于计算矩阵matrix
的n次幂。- 如果n为0,返回单位矩阵(2 x 2的对角线上元素为1,其余元素为0)。 - 如果n为奇数,将问题转化为计算矩阵`matrix`的(n-1)次幂,然后再与原矩阵相乘。 - 如果n为偶数,将问题转化为计算矩阵`matrix`的n/2次幂,然后再与自身相乘。
- 初始化和
sum
为0。
- 使用循环从第2项开始遍历到第21项(共20项)。
- 在循环中,通过调用
matrix_power(i)
计算第i项的矩阵幂,然后将矩阵的第一行第一列的元素除以第二行第一列的元素,并将结果累加到和sum
中。
- 最后打印出和
sum
的值。
代码实现
import numpy as np
# 定义矩阵
matrix = np.array([[1, 1], [1, 0]])
# 计算矩阵的n次方
def matrix_power(n):
# 当n为0时,返回单位矩阵
if n == 0:
return np.eye(2)
# 当n为奇数时,通过递归计算矩阵的(n-1)次方,再与原矩阵相乘
elif n % 2 == 1:
return np.dot(matrix_power(n-1), matrix)
# 当n为偶数时,通过递归计算矩阵的n/2次方,并将得到的矩阵平方
else:
temp = matrix_power(n/2)
return np.dot(temp, temp)
# 计算前20项之和
sum = 0
for i in range(2, 22):
# 计算斐波那契数列中第i项的值
fib_matrix = matrix_power(i)
# 将第i项中第一行第一列的值除以第一行第二列的值,并累加到总和中
sum += fib_matrix[0, 0] / fib_matrix[1, 0]
print(sum)
本作品采用《CC 协议》,转载必须注明作者和本文链接