形如:0,1,1,2,3,5,8,13,21,34,55······的数列,在数学上称为斐波那契数列。
根据斐波那契数列的表达式:F(n)=F(n-1)+F(n-2),(n≤2,F(0)=0,F(1)=1) 可知。从第三位开始,以后每一位的值都是前面两位的值之和,让我们用代码把这个想法表示出来:
a, b = 0, 1 #已知前两位a和b,分别赋值0和1
while True:
s = a + b #第三位开始,每一位的值等于它的前两位值之和
#到第四位,充当前两位的a和b,要作为整体向后移一位,也就是a变成第二位,b变成第三位,以此类推
a = b
b = s
看起来不够味儿,我们把while循环换成for循环,便于控制输出位数。然后添加可以输入位数的语句。最后以列表输出:
a, b = 0, 1 #已知前两位a和b,分别赋值0和1
digit = int(input())
c = [0,1]
for i in range(digit):
s = a + b #第三位开始,每一位的值等于它的前两位值之和
#到第四位,充当前两位的a和b,要作为整体向后移一位,也就是a变成第二位,b变成第三位,以此类推
a = b
b = s
c.append(s)
print(c[:digit])
5
[0, 1, 1, 2, 3]
你可能注意到了创建变量“c”时,初始化的列表里加入了0,1,这是因为程序的结果——“s”,是从第三位开始的,最后的输出则需要选择列表里的前digit位。
但是,这样的代码还不够简练,我们用三个赋值语句完成了目标,可能只用一个语句实现吗?当然行!观察这仨式子,好像可以合成一个式子,因为他们各有相同的变量。把a和b放在等号左边,a的值是由b赋来的,而b的值是由a+b赋来的:
a, b = 0, 1 #已知前两位a和b,分别赋值0和1
digit = int(input())
c = [0]
for i in range(digit):
a, b = b, a + b #三个式子合并之后的结果
c.append(a)
print(c[:digit])
这样就很好看了,然后再把它变成函数,在以后做斐波那契数列相关的题目时直接拿来用就好啦。我是用输入位数举例的,有些情况可能是输入最大值,那用while循环就好了。
所以,位数输入的斐波那契数列:
def Fibonacci(digit):
c = [0]
a, b = 0, 1
for i in range(digit):
a, b = b, a + b
c.append(a)
return c[:digit]
digit = int(input())
print(Fibonacci(digit))