黃昌軍+李顯峰+柴榮軍
【摘要】教學(xué)過程中同一問題反復(fù)出現(xiàn)可以有效降低學(xué)習難度,提升學(xué)習效果。本文總結(jié)分析了斐波納契數(shù)列問題在C語言的循環(huán)、數(shù)組、函數(shù)這三個典型知識點的中的應(yīng)用,三種應(yīng)用可以進行精心設(shè)計,制作成為相應(yīng)的三段微課視頻放在互聯(lián)網(wǎng)上,方便學(xué)生使用移動終端進行訪問,隨時隨地進行泛在學(xué)習。
【關(guān)鍵詞】C語言;斐波那契數(shù)列;應(yīng)用;泛在學(xué)習
【中圖分類號】TP312.1-4 【文獻標識碼】B 【文章編號】2095-3089(2017)09-0012-02
斐波那契數(shù)列由中世紀的意大利數(shù)學(xué)家列昂納多·斐波那契提出,起初僅僅是用來研究兔子繁殖問題,但是隨著時間的推移,斐波那契數(shù)列的重要性日益凸顯,在混沌學(xué)、化學(xué)、晶體結(jié)構(gòu)學(xué)、數(shù)學(xué)、生物學(xué)、經(jīng)濟學(xué)等多個跨度極大的領(lǐng)域得到了十分廣泛的應(yīng)用。
由于其突出的重要性,斐波那契數(shù)列經(jīng)常被稱為“神奇的斐波那契數(shù)列”,其特征簡而言之就是,數(shù)列的前兩項都為1,從第三項開始,數(shù)列的每一項都等于其前兩項之和,即數(shù)列的前若干項分別為1,1,2,3,5,8,13,21,34,55等等。從1963起,美國數(shù)學(xué)學(xué)會開始出版名為《斐波納契數(shù)列季刊》的數(shù)學(xué)雜志,專門發(fā)表斐波那契數(shù)列方面的研究成果。
在C語言的教學(xué)過程中,斐波那契數(shù)列問題在循環(huán)、數(shù)組、函數(shù)等章節(jié)多次出現(xiàn),以下對斐波那契數(shù)列問題在各章節(jié)的具體應(yīng)用加以總結(jié)分析。
一、斐波那契數(shù)列在for循環(huán)中的應(yīng)用
使用迭代法,結(jié)合C語言中使用頻率最高的for循環(huán),實現(xiàn)計算輸出菲波那契數(shù)列的前20項的程序代碼如下:
#include
void main()
{ int fib1,fib2,i;
fib1=1;fib2=1;
for(i=1;i<=10;i++)
{ printf(″%d \t%d \t ″,fib1,fib2);
if(i%2==0) printf(″\n″);
fib1=fib1+fib2;
fib2=fib2+fib1;}
}
這種方法的程序代碼很簡短,但是要讓學(xué)生真正理解其實現(xiàn)過程還是比較難的。授課過程中需要把迭代法的實現(xiàn)過程,即“fib1=fib1+fib2;fib2=fib2+fib1;”這兩條語句的執(zhí)行過程給學(xué)生講得很詳細,讓學(xué)生深入領(lǐng)會其中的編程技巧才能達到比較好的效果,
二、斐波那契數(shù)列在數(shù)組中的應(yīng)用
數(shù)組的每個元素可以對應(yīng)數(shù)列中的一項,因此使用數(shù)組也可以計算輸出菲波那契數(shù)列。以下是使用數(shù)組,計算輸出該數(shù)列的前20項的具體代碼:
#include
void main()
{
int i,fib[21];
fib[1]=1;
fib[2]=1;
for(i=3;i<=20;i++)
fib[i]=fib[i-2]+fib[i-1];
for(i=1;i<=20;i++)
{
printf("%d\t",fib[i]);
if (i%4==0) printf("\n" );
}
}
程序中,數(shù)組長度定義為21,為了編程方便,只使用其中下標1到20的數(shù)組元素??梢园l(fā)現(xiàn),第一個for循環(huán)中的賦值語句和菲波那契數(shù)列的通項公式非常類似,因此,學(xué)生理解起來難度不高,明顯要比第一種方法簡單,不需要太多的編程技巧,體現(xiàn)出了數(shù)組的優(yōu)點。另外使用這種方法時,數(shù)列的每一項都保存在對應(yīng)的數(shù)組元素中,可以隨時使用數(shù)列的任意一項,顯然第一種方法是做不到這一點的。
三、斐波那契數(shù)列在函數(shù)中的應(yīng)用
C語言是一種函數(shù)型的語言,C程序的基本組成單位就是一個個的函數(shù)。其中有一種函數(shù)叫做遞歸函數(shù),遞歸函數(shù)的突出特征是自己調(diào)用自己。菲波那契數(shù)列的自身特征決定了它很適合用遞歸函數(shù)來實現(xiàn)。
我們可以編寫一個遞歸函數(shù)計算菲波那契數(shù)列任意一項的值,然后在main函數(shù)中寫一個for循環(huán),在循環(huán)體中調(diào)用這個遞歸函數(shù)計算輸出數(shù)列的前20項。
完整的程序代碼如下,:
#include
long fib(int n)
{ long f;
if (n==1 || n==2)
f=1;
else
f=fib(n-1)+fib(n-2);
return(f);
}
void main(void)
{ int i;
for (i=1;i<=20;i++)
{ printf(“%ld\t”,fib(i));
if (i%4==0)
printf(“\n”);
}
printf(“\n”);
}
在第三種方法中,數(shù)列任意一項的計算和第二種方法類似,難度不高。在這段程序中,函數(shù)的返回值定義為long型,以使其可以計算的值更大一些,適用面更廣一些。
從運行結(jié)果看,以上三個程序?qū)崿F(xiàn)了完全相同的效果,都計算輸出了斐波納契數(shù)列的前20項,并且都是輸出五行,每行輸出四個,但是其實現(xiàn)過程完全不同。
以上總結(jié)分析了斐波納契數(shù)列在C語言的三個典型知識點的中的應(yīng)用,三種應(yīng)用可以進行精心設(shè)計,制作成為相應(yīng)的三段微課視頻放在互聯(lián)網(wǎng)上,方便學(xué)生使用移動終端進行訪問,隨時隨地進行泛在學(xué)習。
參考文獻
[1]黃昌軍,李音,柴榮軍. 素數(shù)問題在C語言教學(xué)中的應(yīng)用[J]. 考試周刊,2015(89):118.
[2]黃昌軍,柴榮軍,張婷曼. 泛在學(xué)習典型應(yīng)用平臺探討[J]. 現(xiàn)代商貿(mào)工業(yè),2016(29):171.
[3]申云成,顧慶傳. 用C語言程序?qū)崿F(xiàn)斐波拉契數(shù)列的微課教學(xué)探討[J]. 福建電腦,2014,30(6):147-149.
[4]孫義欣,宋大偉. 斐波那契數(shù)列問題的C語言教學(xué)實施探討[J]. 電腦編程技巧與維護,2012(16):151-152.
[5]柴榮軍,黃昌軍,張婷曼. 基于智能終端的泛在學(xué)習個性化系統(tǒng)設(shè)計[J]. 新教育時代電子雜志:學(xué)生版,2016(1).