斐波那契數列

2021-08-10 13:10:14 字數 7005 閱讀 5273

1樓:匿名使用者

解:∵斐波那契數列有一個性質:一個固定的正整數除所有的斐波那契數,所得餘陣列成的數列是有周期的。

∴先確定正整數8除斐波那契數的週期:

項數 斐波那契數 除以8的餘數1 1 12 1 13 2 24 3 35 5 56 8 07 13 58 21 59 34 210 55 711 89 112 144 013 233 114 377 115 610 216 987 317 1597 518 2584 019 4181 520 6765 521 10946 222 17711 723 28657 124 46368 025 75025 126 121393 127 196418 228 317811 329 514229 530 832040 031 1346269 532 2178309 533 3524578 234 5702887 735 9227465 136 14930352 037 24157817 138 39088169 139 63245986 240 102334155 3可見其週期是12

∵2008÷12=167......4

∴斐波那契數列第2008項除以8的餘數和第4項除以8的餘數相同∵斐波那契數列第4項除以8的餘數是3 【見上表第4項的餘數】∴斐波那契數列第2008項除以8的餘數就是3【說明:2008除以12得到餘數4,是為了確定第2008項和第4項在週期中的位置相同,與斐波那契數本身除以8的餘數不是一回事。為了看清週期,這裡多排了幾個,實際計算時至多算2個週期就足夠了,必要時看到新的週期開始就可以了。

另外,如果給出的某個項數(相當於本題的2008)除以12,餘數為0(即除盡),就看第12項除以8的餘數,因為12除以12的餘數也為0。】

2樓:小苒

斐波那契數列,「斐波那契數列」的發明者,是義大利數學家列昂納多•斐波那契(leonardo fibonacci,生於公元2023年,卒於2023年。籍貫大概是比薩)。他被人稱作「比薩的列昂納多」。

2023年,他撰寫了《珠算原理》(liber abaci)一書。他是第一個研究了印度和阿拉伯數學理論的歐洲人。他的父親被比薩的一家商業團體聘任為外交領事,派駐地點相當於今日的阿爾及利亞地區,列昂納多因此得以在一個阿拉伯老師的指導下研究數學。

他還曾在埃及、敘利亞、希臘、西西里和普羅旺斯研究數學。

斐波那契數列指的是這樣一個數列:1,1,2,3,5,8,13,21……

這個數列從第三項開始,每一項都等於前兩項之和。它的通項公式為:(1/√5)*【√5表示根號5】

很有趣的是:這樣一個完全是自然數的數列,通項公式居然是用無理數來表達的。

【該數列有很多奇妙的屬性】

比如:隨著數列項數的增加,前一項與後一項之比越逼近**分割0.6180339887……

還有一項性質,從第二項開始,每個奇數項的平方都比前後兩項之積多1,每個偶數項的平方都比前後兩項之積少1。

如果你看到有這樣一個題目:某人把一個8*8的方格切成四塊,拼成一個5*13的長方形,故作驚訝地問你:為什麼64=65?

其實就是利用了斐波那契數列的這個性質:5、8、13正是數列中相鄰的三項,事實上前後兩塊的面積確實差1,只不過後面那個圖中有一條細長的狹縫,一般人不容易注意到。

如果任意挑兩個數為起始,比如5、-2.4,然後兩項兩項地相加下去,形成5、-2.4、2.

6、0.2、2.8、3、5.

8、8.8、14.6……等,你將發現隨著數列的發展,前後兩項之比也越來越逼近**分割,且某一項的平方與前後兩項之積的差值也交替相差某個值。

斐波那契數列的第n項同時也代表了集合中所有不包含相鄰正整數的子集個數。

【斐波那契數列別名】

斐波那契數列又因數學家列昂納多•斐波那契以兔子繁殖為例子而引入,故又稱為「兔子數列」。

斐波那契數列

一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔都不死,那麼一年以後可以繁殖多少對兔子?

我們不妨拿新出生的一對小兔子分析一下:

第一個月小兔子沒有繁殖能力,所以還是一對;

兩個月後,生下一對小兔民數共有兩對;

三個月以後,老兔子又生下一對,因為小兔子還沒有繁殖能力,所以一共是三對;

------

依次類推可以列出下表:

經過月數:0123456789101112

兔子對數:1123581321345589144233

表中數字1,1,2,3,5,8---構成了一個數列。這個數列有關十分明顯的特點,那是:前面相鄰兩項之和,構成了後一項。

這個數列是義大利中世紀數學家斐波那契在<算盤全書>中提出的,這個級數的通項公式,除了具有a(n+2)=an+a(n+1)/的性質外,還可以證明通項公式為:an=1/√[(1+√5/2) n-(1-√5/2) n](n=1,2,3.....)

【斐波那挈數列通項公式的推導】

斐波那契數列:1,1,2,3,5,8,13,21……

如果設f(n)為該數列的第n項(n∈n+)。那麼這句話可以寫成如下形式:

f(1)=f(2)=1,f(n)=f(n-1)+f(n-2) (n≥3)

顯然這是一個線性遞推數列。

通項公式的推導方法一:利用特徵方程

線性遞推數列的特徵方程為:

x^2=x+1

解得x1=(1+√5)/2, x2=(1-√5)/2.

則f(n)=c1*x1^n + c2*x2^n

∵f(1)=f(2)=1

∴c1*x1 + c2*x2

c1*x1^2 + c2*x2^2

解得c1=1/√5,c2=-1/√5

∴f(n)=(1/√5)*【√5表示根號5】

通項公式的推導方法二:普通方法

設常數r,s

使得f(n)-r*f(n-1)=s*[f(n-1)-r*f(n-2)]

則r+s=1, -rs=1

n≥3時,有

f(n)-r*f(n-1)=s*[f(n-1)-r*f(n-2)]

f(n-1)-r*f(n-2)=s*[f(n-2)-r*f(n-3)]

f(n-2)-r*f(n-3)=s*[f(n-3)-r*f(n-4)]

……f(3)-r*f(2)=s*[f(2)-r*f(1)]

將以上n-2個式子相乘,得:

f(n)-r*f(n-1)=[s^(n-2)]*[f(2)-r*f(1)]

∵s=1-r,f(1)=f(2)=1

上式可化簡得:

f(n)=s^(n-1)+r*f(n-1)

那麼:f(n)=s^(n-1)+r*f(n-1)

= s^(n-1) + r*s^(n-2) + r^2*f(n-2)

= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) + r^3*f(n-3)

……= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)*f(1)

= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)

(這是一個以s^(n-1)為首項、以r^(n-1)為末項、r/s為公差的等比數列的各項的和)

=[s^(n-1)-r^(n-1)*r/s]/(1-r/s)

=(s^n - r^n)/(s-r)

r+s=1, -rs=1的一解為 s=(1+√5)/2, r=(1-√5)/2

則f(n)=(1/√5)*

【c語言程式】

main()

; int i;

for(i=2;i<40;i++)

for(i=0;i<40;i++)

return 0;

} 【pascal語言程式】

varfib: array[0..40]of longint;

i: integer;

begin

fib[0] := 1;

fib[1] := 1;

for i:=2 to 39 do

fib[i ] := fib[i-1] + fib[i-2];

for i:=0 to 39 do

write('f', i, '=', fib[i ]);

end.

【數列與矩陣】

對於斐波那契數列1,1,2,3,5,8,13…….有如下定義

f(n)=f(n-1)+f(n-2)

f(1)=1

f(2)=1

對於以下矩陣乘法

f(n+1) = 1 1 * f(n)

f(n) 1 0 f(n-1)

它的運算就是

f(n+1)=f(n)+f(n-1)

f(n)=f(n)

可見該矩陣的乘法完全符合斐波那契數列的定義

設1 為b,1 1為c

1 1 0

可以用迭代得到:

斐波那契數列的某一項f(n)=(bc^(n-2))1

這就是斐波那契數列的矩陣乘法定義.

另矩陣乘法的一個運演算法則a¬^n(n為偶數)=a^(n/2)* a^(n/2).

因此可以用遞迴的方法求得答案.

時間效率:o(logn),比模擬法o(n)遠遠高效。

**(pascal)

program fibonacci;

type

matrix=array[1..2,1..2] of qword;

varc,cc:matrix;

n:integer;

function multiply(x,y:matrix):matrix;

vartemp:matrix;

begin

temp[1,1]:=x[1,1]*y[1,1]+x[1,2]*y[2,1];

temp[1,2]:=x[1,1]*y[1,2]+x[1,2]*y[2,2];

temp[2,1]:=x[2,1]*y[1,1]+x[2,2]*y[2,1];

temp[2,2]:=x[2,1]*y[1,2]+x[2,2]*y[2,2];

exit(temp);

end;

function getcc(n:integer):matrix;

vartemp:matrix;

t:integer;

begin

if n=1 then exit(c);

t:=n div 2;

temp:=getcc(t);

temp:=multiply(temp,temp);

if odd(n) then exit(multiply(temp,c))

else exit(temp);

end;

procedure init;

begin

readln(n);

c[1,1]:=1;

c[1,2]:=1;

c[2,1]:=1;

c[2,2]:=0;

if n=1 then

begin

writeln(1);

halt;

end;

if n=2 then

begin

writeln(1);

halt;

end;

cc:=getcc(n-2);

end;

procedure work;

begin

writeln(cc[1,1]+cc[1,2]);

end;

begin

init;

work;

end.

【數列值的另一種求法】

f(n) = [ (( sqrt ( 5 ) + 1 ) / 2) ^ n ]

其中[ x ]表示取距離 x 最近的整數。

【數列的前若干項】

1 1

2 2

3 3

4 5

5 8

6 13

7 21

8 34

9 55

10 89

11 144

12 233

13 377

14 610

15 987

16 1597

17 2584

18 4181

19 6765

20 10946

斐波那契數列的公式是什麼,斐波那契數列求和公式

這個數列是由13世紀義大利斐波那契提出的的,故叫斐波那契數列。該數列由下面的遞推關係決定 f0 0,f1 1 fn 2 fn fn 1 n 0 它的通項公式是 fn 1 根號5 n屬於正整數 補充問題 菲波那契數列指的是這樣一個數列 1,1,2,3,5,8,13,21 這個數列從第三項開始,每一項都...

c語言斐波那契數列的定義為,c語言斐波那契數列的定義為F11,F21,FnFn2Fn1請輸出斐波那契數列的前n項。

include int arr 100 int main return 0 水題 用遞迴會爆的 急急急 計算fibonacci數列前n項和,提示f n 定義 f n f n 1 f n 2 用c語言程式設計 急求 在此借用一下夜遊神小翠的程式 include define n 20 int fibo...

用python函式寫斐波那契數列是什麼?

斐波那契數列指的是這樣一個數列 0,1,1,2,3,5,8,13,特別指出 第0項是0,第1項是第一個1。從第三項開始,每一項都等於前兩項之和。判斷輸入的值是否合法。if nterms 0 print 請輸入一個正整數。elif nterms 1 print 斐波那契數列 print n1 else...