目录
1.说明
2.原理
3.python实现
第一种:
第二种:
第三种
第四种
1.说明
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......
如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯称之为费氏数列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89......
2.原理
斐波那契数列的规律其实就是将前两项的值相加并得到当前项的值,用for循环和while循环都能实现这个逻辑,如下图:
赋值原理:
n代表斐波那契数列(以下简称数列)中的当前项的值,这个值要存储起来在下一个循环中与当前循环中的上一项相加,也就是下一个循环中的前二项,由于斐波那契数列是从0和1开始的,所以在循环开始时要初始化a和b的值,将a作为第0项,b作为第一项。在第一次循环中n=a+b=1,这样n中就储存了第二项的值,然后将这个值赋值给b,使b中存储第二项的数列值,也就是当前项的数列值。另外,更重要的一点是,在n赋值给b之前,b一定要将其在当前循环中的值先赋值给a,然后a的值就是下次循环中的第前二项的值。在某次循环中,n始终代表的是数列中当前项的值,b的最终值也是当前项的值,但会留在下一次循环中作为下一次循环的前一项的值使用,而a在本次循环中的最终值则是当前循环中b的初始值,也就是上一次循环的n的值,即当前循环的上一个数列值,下一循环的前二项的值。依次类推,周而复始的计算出斐波那契数列。
3.python实现
第一种:
#斐波那契数列实现
n = int(input("请输入您要输出多少项:"))n1 = 0#起始第一项
n2 = 1#起始第二项
count = 2#因为已有第一项和第二项,所以起始次数为2#判断输入输出的合理性并完成输出
if n <= 0:print("请输入一个正整数!")
elif n == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")print(n1,",",n2,end=" ,")while count < n:sum = n1 + n2print(sum,end=" ,")#更新 n1 n2 的值n1,n2 = n2,sumcount += 1
输出:
看到我们得到的结果,最后还有一个逗号,对于我这有强迫症的人,实在不能接受,那咋整?
第二种:
消除第一种,后面的逗号
#斐波那契数列实现
n = int(input("请输入您要输出多少项:"))n1 = 0#起始第一项
n2 = 1#起始第二项
count = 2#因为已有第一项和第二项,所以起始次数为2#判断输入输出的合理性并完成输出
if n <= 0:print("请输入一个正整数!")
elif n == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")print(n1,",",n2,end=" ,")while count < n-1:sum = n1 + n2print(sum,end=" ,")#更新 n1 n2 的值n1,n2 = n2,sumcount += 1
if count < n:sum = n1 + n2print(sum,end="")#更新 n1 n2 的值n1,n2 = n2,sumcount += 1
返回:
在这里,我们可以看到,第一种结果中,最后的 , 没有了,但这种方法感觉还是比较复杂,那?
第三种
我们用列表来输出斐波那契数列试试,while循环
#斐波那契数列实现
n = int(input("请输入您要输出多少项:"))n1 = 0#起始第一项
n2 = 1#起始第二项
L = [n1,n2] #起始列表#判断输入输出的合理性并完成输出
if n <= 0:print("请输入一个正整数!")
elif n == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")for i in range(2,n):sum = n1 + n2L.append(sum)#更新 n1 n2 的值n1,n2 = n2,sumprint(L)
返回:
第四种
for循环输出列表斐波那契数列
#斐波那契数列实现
n = int(input("请输入您要输出多少项:"))n1 = 0#起始第一项
n2 = 1#起始第二项
L = [n1,n2] #起始列表
count = 2#因为已有第一项和第二项,所以起始次数为2#判断输入输出的合理性并完成输出
if n <= 0:print("请输入一个正整数!")
elif n == 1:print("斐波那契数列:")print(n1)
else:print("斐波那契数列:")while count < n:sum = n1 + n2L.append(sum)#更新 n1 n2 的值n1,n2 = n2,sumcount += 1print(L)
输出: