首先,為了方便描述,我們進行如下定義:
(1)我們用Fi(有時為了避免歧義,需要在i的兩邊加上中括弧,而在一般情況下,為了簡便起見就不加括弧了)表示fibonacci數列的第i項,fibonacci數列是這樣的一個數列:F1=1,F2=1,Fn=Fn-1+Fn-2,n為任意的整數.(注意,fibonacci數列是有負數項的).
[一]fibonacci數列的組合意義
我們考慮一塊1*n的矩形地面(或者其他的什麼鬼東西),用1*1和1*2的磚塊填充它的方案數.
我們用Gi表示1*n的矩形地面被1*2和1*1的磚塊填充的方案數.
考慮最後一塊磚是1*1還是1*2,我們得到:Gi=Gi-1+Gi-2.
考慮邊界條件,我們有:G1=1,G2=2.
所以,Gi=F[i+1].由於G序列與F序列的關係以及G序列的意義,下文中經常會用G代替F,以使一些定理的形式更加直觀,優美.
由於這是下文分析fibonacci數列的一個重要的工具,所以我們現在這裡做一些約定:稱1*1的磚塊為A類磚,1*2的磚塊為B類磚,一個A類磚的位置就是它在平面中的位置,一個B類磚的位置是它的左端在平面中的位置.間隔為兩個地板間的間隙,一個間隔要麼被一個B類磚覆蓋,要麼是2個磚塊間的間隙,為了簡便起見,將"覆蓋一個1*n的矩形平面"簡稱為"覆蓋n","一個1*n的平面的覆蓋方案"簡稱為"n的一個覆蓋".
若無特殊說明,下文中出現的變數都是整數.
[二]利用fibonacci數列的組合意義來分析fibonacci的性質
(1)G[n]-1=G[n-2]+G[n-3]+G[n-4]+...+G[3]+G[2]+G[1]+G[0],n-2>0
考慮至少用一個B類磚覆蓋n,它的方案數顯然為G[n]-1.由於至少有一個B類磚,讓我們對最後一個B類磚的位置分情況討論:
若最後一個B類磚在最後(即最後一個B類磚後沒有A類磚),那麼覆蓋的方案數為F[n-2].
如果最後一個B類磚後有1個A類磚,那麼覆蓋的方案數為:G[n-3]
如果最後一個B類磚後有2個A類磚,那麼覆蓋的方案數為:G[n-4]
...
如果最後一個B類磚後有n-2個A類磚,那麼覆蓋的方案數為:G[0]
因此,G[n]-1=G[n-2]+G[n-3]+G[n-4]+...+G[3]+G[2]+G[1]+G[0],n-2>0
(2)G[2N+1]=G[2N]+G[2N-2]+G[2N-4]+...+G[4]+G[3]+G[2]+G[0],n>0
考慮2n+1的一個覆蓋,它的方案數顯然為G[2n+1].
由於2n+1是一個奇數,所以他至少有一個A類磚,且最後一個A類磚的位置必然是奇數.
對最後一個A類磚的位置進行分類討論:
若它的位置為2n+1,則方案數為:G[2n]
若他的位置為2n-1,則方案數為:G[2n-2]
若他的位置為2n-3,則方案數為:G[2n-4]
...
若他的位置為1,則方案數為:G[0]
因此,G[2N+1]=G[2N]+G[2N-2]+G[2N-4]+...+G[4]+G[3]+G[2]+G[0],n>0
講完這兩個,應該算是瞭解了冰山一角了.雖然這兩個公式有點雞肋,但給了我們一些有益的啟示.下面大部分都是一些有用的了.
(3)G[m+n]=G[m-1]*G[n-1]+G[m]*G[n]
我們考慮覆蓋一個m+n的方案數,根據定義,它顯然是G[m+n].
接著,讓我們考慮第m個間隔,即將前m個格子與後n個格子分開的那個間隔.
如果第m個間隔被一個B類磚跨越,那麼左邊只剩下m-1個格子,右邊只剩下n-1個格子,根據乘法原理,這種情況的方案數為G[m-1]*G[n-1]
如果第m個間隔沒有被B類磚跨越,那麼這個間隔就將最後的方案分成了互不相關的2部分,根據乘法原理,這種情況的方案數為G[m]*G[n].
因此,G[m+n]=Gm*Gn+G[m-1]*G[n-1].如果用F來表示的話,就是:F[m+n+1]=F[m]*F[n]+F[m+1]*F[n+1]或F[m+n]=F[m]*F[n-1]+F[m+1]*F[n].這是一個很重要的結論.
利用數學歸納法也可以證明這個結論,不過略顯麻煩,且不容易理解.
(4)F[n]|F[m],n|m
證明:這個定理可以使用組合意義來解釋,不過更為簡潔的證明是利用數學歸納法.這裡只介紹數學歸納法.
令m=kn,k為任意的整數.
顯然,當k=1時,F[n]|f[m].
若F[n]|F[kn],則:F[(k+1)n]=F[kn+n]=F[kn]*F[n-1]+F[kn+1]*F[n].由於F[n]|F[kn]且F[n]|F[n],所以F[n]|F[(k+1)n]
證畢.
(5)GCD(F[N],F[M])=F[GCD(N,M)]
我認為這個性質是fibonacci數列最美妙的性質之一.我目前還沒有想到或者看到組合意義上的解釋,所以直接講證明.
設n=km+r,則:
gcd(F[N],F[M])=gcd(F[M],F[KM+R]) =GCD(F[M],F[KM]*F[R-1]+F[KM+1]*F[R])=GCD(F[M],F[KM+1]*F[R]).
因為F[KM+1]與F[M]互質,所以GCD(F[N],F[M])=GCD(F[M],F[R]).
回憶一下歐幾裡得演算法,GCD(M,N)=GCD(M,R),R=N%M,我們發現,這個式子的轉化與歐幾裡得演算法的過程一模一樣.
因此,GCD(F[N],F[M])=F[GCD(N,M)].
講清楚這個性質,fibonacci數列的分析方法也應該會了個大概了.曆史上有很多通項或遞推公式很奇葩的數列,分析他們的性質時可以利用他們的現實意義來進行啟發學習法的聯想.通過這種分析方式,也可以揭示一些有趣的性質的本質.
BY QW
轉載請註明出處