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项之和,具体步骤如下:

  1. 初始化变量a=2, b=1, sum=0,表示数列的第一项为2/1,累加和为0。
  1. 使用循环计算数列的后续19项,每次将a和b更新为下一项的分子和分母,同时将累加和加上这一项的值。
  1. 循环结束后,累加和即为数列的前20项之和。

代码实现

a, b = 2, 1
sum = 0

for i in range(20):
    sum += a / b
    a, b = a + b, a

print("前20项之和为:", sum)

解题思路二

题目分析: 给定的数列是斐波那契数列的一个变种,每一项是前两项的和。要求计算该数列的前20项之和。

解题思路:

  1. 定义一个递归函数fibonacci(n),用于计算第n个斐波那契数。
  1. 初始化和sum为0。
  1. 使用循环从第2项开始遍历到第21项(共20项)。
  1. 在循环中,计算第i项和第i-1项的斐波那契数,并将结果累加到和sum中。
  1. 最后打印出和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)

解题思路三

  1. 导入NumPy库。
  1. 定义一个2 x 2 的矩阵matrix,其中第一行是[1, 1],第二行是[1, 0]。
  1. 定义一个递归函数matrix_power(n),用于计算矩阵matrix的n次幂。
-   如果n为0,返回单位矩阵(2 x 2的对角线上元素为1,其余元素为0)。


-   如果n为奇数,将问题转化为计算矩阵`matrix`(n-1)次幂,然后再与原矩阵相乘。


-   如果n为偶数,将问题转化为计算矩阵`matrix`的n/2次幂,然后再与自身相乘。
  1. 初始化和sum为0。
  1. 使用循环从第2项开始遍历到第21项(共20项)。
  1. 在循环中,通过调用matrix_power(i)计算第i项的矩阵幂,然后将矩阵的第一行第一列的元素除以第二行第一列的元素,并将结果累加到和sum中。
  1. 最后打印出和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 协议》,转载必须注明作者和本文链接
鹅不糊涂
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!