【蓝桥杯每日一练】 斐波那契数列
目錄
1.說明
2.原理
3.python實現(xiàn)
第一種:
第二種:
第三種
?第四種
1.說明
Fibonacci為1200年代的歐洲數(shù)學(xué)家,在他的著作中曾經(jīng)提到:「若有一只免子每個月生一只小免子,一個月后小免子也開始生產(chǎn)。起初只有一只免子,一個月后就有兩只免子,二個月后有三只免子,三個月后有五只免子(小免子投入生產(chǎn))......
????????如果不太理解這個例子的話,舉個圖就知道了,注意新生的小免子需一個月成長期才會投入生產(chǎn),類似的道理也可以用于植物的生長,這就是Fibonacci數(shù)列,一般習(xí)慣稱之為費氏數(shù)列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89......
2.原理
????????斐波那契數(shù)列的規(guī)律其實就是將前兩項的值相加并得到當(dāng)前項的值,用for循環(huán)和while循環(huán)都能實現(xiàn)這個邏輯,如下圖:
賦值原理:
n代表斐波那契數(shù)列(以下簡稱數(shù)列)中的當(dāng)前項的值,這個值要存儲起來在下一個循環(huán)中與當(dāng)前循環(huán)中的上一項相加,也就是下一個循環(huán)中的前二項,由于斐波那契數(shù)列是從0和1開始的,所以在循環(huán)開始時要初始化a和b的值,將a作為第0項,b作為第一項。在第一次循環(huán)中n=a+b=1,這樣n中就儲存了第二項的值,然后將這個值賦值給b,使b中存儲第二項的數(shù)列值,也就是當(dāng)前項的數(shù)列值。另外,更重要的一點是,在n賦值給b之前,b一定要將其在當(dāng)前循環(huán)中的值先賦值給a,然后a的值就是下次循環(huán)中的第前二項的值。在某次循環(huán)中,n始終代表的是數(shù)列中當(dāng)前項的值,b的最終值也是當(dāng)前項的值,但會留在下一次循環(huán)中作為下一次循環(huán)的前一項的值使用,而a在本次循環(huán)中的最終值則是當(dāng)前循環(huán)中b的初始值,也就是上一次循環(huán)的n的值,即當(dāng)前循環(huán)的上一個數(shù)列值,下一循環(huán)的前二項的值。依次類推,周而復(fù)始的計算出斐波那契數(shù)列。
3.python實現(xiàn)
第一種:
#斐波那契數(shù)列實現(xiàn) n = int(input("請輸入您要輸出多少項:"))n1 = 0#起始第一項 n2 = 1#起始第二項 count = 2#因為已有第一項和第二項,所以起始次數(shù)為2#判斷輸入輸出的合理性并完成輸出 if n <= 0:print("請輸入一個正整數(shù)!") elif n == 1:print("斐波那契數(shù)列:")print(n1) else:print("斐波那契數(shù)列:")print(n1,",",n2,end=" ,")while count < n:sum = n1 + n2print(sum,end=" ,")#更新 n1 n2 的值n1,n2 = n2,sumcount += 1輸出:
?看到我們得到的結(jié)果,最后還有一個逗號,對于我這有強迫癥的人,實在不能接受,那咋整?
第二種:
?消除第一種,后面的逗號
#斐波那契數(shù)列實現(xiàn) n = int(input("請輸入您要輸出多少項:"))n1 = 0#起始第一項 n2 = 1#起始第二項 count = 2#因為已有第一項和第二項,所以起始次數(shù)為2#判斷輸入輸出的合理性并完成輸出 if n <= 0:print("請輸入一個正整數(shù)!") elif n == 1:print("斐波那契數(shù)列:")print(n1) else:print("斐波那契數(shù)列:")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返回:
?在這里,我們可以看到,第一種結(jié)果中,最后的 , 沒有了,但這種方法感覺還是比較復(fù)雜,那?
第三種
我們用列表來輸出斐波那契數(shù)列試試,while循環(huán)
#斐波那契數(shù)列實現(xiàn) n = int(input("請輸入您要輸出多少項:"))n1 = 0#起始第一項 n2 = 1#起始第二項 L = [n1,n2] #起始列表#判斷輸入輸出的合理性并完成輸出 if n <= 0:print("請輸入一個正整數(shù)!") elif n == 1:print("斐波那契數(shù)列:")print(n1) else:print("斐波那契數(shù)列:")for i in range(2,n):sum = n1 + n2L.append(sum)#更新 n1 n2 的值n1,n2 = n2,sumprint(L)返回:
?第四種
for循環(huán)輸出列表斐波那契數(shù)列
#斐波那契數(shù)列實現(xiàn) n = int(input("請輸入您要輸出多少項:"))n1 = 0#起始第一項 n2 = 1#起始第二項 L = [n1,n2] #起始列表 count = 2#因為已有第一項和第二項,所以起始次數(shù)為2#判斷輸入輸出的合理性并完成輸出 if n <= 0:print("請輸入一個正整數(shù)!") elif n == 1:print("斐波那契數(shù)列:")print(n1) else:print("斐波那契數(shù)列:")while count < n:sum = n1 + n2L.append(sum)#更新 n1 n2 的值n1,n2 = n2,sumcount += 1print(L)輸出:
總結(jié)
以上是生活随笔為你收集整理的【蓝桥杯每日一练】 斐波那契数列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统安装及配置——Centos
- 下一篇: android存到手机内存,androi