题目
Code
-法1
def count(n):
a,b=1,1
for i in range(n-1):
a,b=b,a+b
return a
value=[]
n=int(input())
for i in range(n):
value.append(int(input().strip()))
for i in range(n):
y=value[i]
a=count(y)
print(a)
代码解析
- 定义一个函数 count(n),它接受一个整数 n 作为参数。
在函数中,初始化变量 a 和 b,分别赋值为 1(表示斐波那契数列的前两项) - 使用 for 循环从 0 到 n-1 进行迭代,每次迭代进行以下操作:
使用 a 和 b 相加的结果更新 a 的值;使用原本 a 的值更新 b 的值。 - 循环结束后,函数返回变量 a,即斐波那契数列的第 n 项的值。
解析完函数部分后,代码的主要逻辑如下:
- 声明一个空列表 value,用于存储输入的值。
- 使用 input() 函数读取一个整数 n,表示需要计算斐波那契数列的项数。
- 使用 for 循环从 0 到 n-1 进行迭代,每次迭代进行以下操作:
使用 input() 函数读取一个整数,并使用 int() 函数将其转换为整型。
将转换后的整型值添加到列表 value 中。 - 使用另一个 for 循环从 0 到 n-1 进行迭代,每次迭代进行以下操作:
将 value 列表中第 i 个元素赋值给变量 y。调用函数 count(y) 计算斐波那契数列的第 y 项的值,并将结果赋值给变量 a。使用 print() 函数输出变量 a。
这样,代码将逐个读取输入的值,计算斐波那契数列的对应项,并将结果逐个输出。
-法2(递归函数不变,对下面基础代码进行了优化)
def count(n):
a,b=1,1
for i in range(n-1):
a,b=b,a+b
return a
for _ in range(int(input())):
y = int(input().strip())
a = count(y)
print(a)
#但是有个问题就是输出有卡顿
代码解析
相比于法1就是省略了开拓一个列表的工作
解题思路
首先是针对斐波那契数列的解读
然后再一个就是对输入的处理了,用了strip()
函数,
奇技淫巧
- Q:怎么根据斐波那契数列的计算规则编写函数?
–> - Q:输入的格式很奇怪,怎么处理?
补充
当然对于这类问题,网上还有一些其他更优的解法,动态规划什么的,大家可以自行去探索!