斐波那契数列

表達式

為求得費氏數列的一般表達式，可以藉助線性代數的方法。高中的初等數學知識也能求出。

首先構建等比數列

設
化簡得

比較係數可得：
不妨設

解得：

又因為有，
即為等比數列。

求出數列{
  
    
      
        
          a
          
            n
          
        
        +
        α
        
          a
          
            n
            −
            1
          
        
      
    
    {\displaystyle a_{n}+\alpha a_{n-1}}
  
}

由以上可得：
變形得：
。
令

求數列{
  
    
      
        
          b
          
            n
          
        
      
    
    {\displaystyle b_{n}}
  
}進而得到{
  
    
      
        
          a
          
            n
          
        
      
    
    {\displaystyle a_{n}}
  
}

設，解得。
故數列為等比數列

即。而，
故有

又有
和

可得
得出表達式

求矩陣的特徵值：
  
    
      
        λ
      
    
    {\displaystyle \lambda }

行列式：
當行列式的值為0，解得=或=

數論解法

實際上，如果將費氏數列的通項公式寫成，即可利用解二階線性齊次遞迴關係式的方法，寫出其特徵多項式（該式和表達費氏數列的矩陣的特徵多項式一致），然後解出=，=，即有，其中為常數。我們知道，因此，解得。

用計算機求解

可通過編程觀察費氏數列。分為兩類問題，一種已知數列中的某一項，求序數。第二種是已知序數，求該項的值。
可通過遞迴遞推的算法解決此兩個問題。
事實上當n相當巨大的時候，O（n）的遞推/遞迴非常慢……這時候要用到矩陣快速冪這一技巧，可以使遞迴加速到O(logn)。

與平方數的關係

費氏數列中，只有3個平方數：0、1、144。

和自然的關係

許多的生物構成都和費氏數列有正相關。例如人體從腳底至頭頂之距離和從肚臍至腳底之距趨近於
,向日葵的種子螺旋置換有99%是。

相關的數列

費波那西數列是費波那西n步數列步數為2的特殊情況，也和盧卡斯數列有關。

巴都萬數列

費波那西數列可以用一個接一個的正方形來表現，巴都萬數列則是用一個接一個的等邊三角形來表現，它有的關係。

佩爾數列

佩爾數列的遞迴公式為，前幾項為0,1,2,5,12,29,70,169,408,...

相關猜想

費氏數列中是否存在無窮多個質數？
在費氏數列中，有質數：
2, 3, 5, 13, 89, 233, 1597, 28657, 514229, 433494437, 2971215073, 99194853094755497, 1066340417491710595814572169, 19134702400093278081449423917……
目前已知最大質數是第81839個斐波那契數，一共有17103位數。

程式參考

JavaScript疊代版
function fib(n) {
    var fib_n = function(curr, next, n) {
        if (n == 0) {
            return curr;
        }
        else {
            return fib_n(next, curr+next, n-1);
        }
    }
    return fib_n(0, 1, n);}alert(fib(40));
C語言通項公式版
#include <stdio.h>#include <math.h>int main(){
    int n;
    double constant_a = (1 + sqrt(5)) / 2;
    double constant_b = (1 - sqrt(5)) / 2;
    double constant_c = sqrt(5) / 5;
    double value_1 = 0;
    int value_2 = 0;
    scanf("%d", &n);
    if(n > 0)
    {
        for (int i = 0; i < n; i++)
        {
             value_1 = constant_c * (pow(constant_a, i) - pow(constant_b, i));
             value_2 = (int)value_1;
             printf("%d\n", value_2);
        }
        return 0;
    }
    else
    {
        return -1;
    }}

c++通項公式版
#include <iostream>#include <cmath>using namespace std;int main(){
    unsigned long long n;
    double ca = (1 + sqrt(5)) / 2;
    double cb = (1 - sqrt(5)) / 2;
    double cc = sqrt(5) / 5;
    double v1 = 0;
    double v2 = 0;
    cout <<" ";
    cin>>n;
    if(n > 0)
    {
        for (unsigned long long i = 0; i < n; i++)
    {
            v1 = cc * (pow(ca, i) - pow(cb, i));
        v2 = (int)v1;
        cout <<v2<<endl;
    }
    return 0;
    }
    else
    {
        return -1;
    }
        cout <<'/b';}
Python語言通項公式版
# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result
fibs = [0, 1]numZS = int(input('How many Fibonacci numbers do you want? '))for i in range(numZS-2):
    fibs.append(fibs[-2] + fibs[-1])print fibs
Common Lisp
(defun fibs (x)
  (cond ((equal x 0) 1)
        ((equal x 1) 1)
        (t (+ (fibs (- x 1))
              (fibs (- x 2))))))(defun fibs (x)
  (do ((n 0 (+ n 1))
       (i 1 j)
       (j 1 (+ i j)))
      ((equal n x) i)))
Go語言通項公式版：
package mainimport "fmt"func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1)}func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Printf("%d\t", fibonacci(i))
}}
Java語言通項公式版：
public int fibonacci(int n){
    if(n<2){
     return n;
    }else {
      return fibonacci(n-1)+fibonacci(n-2);
    }}
Java語言快捷版：
public int fibonacci(int n){
    if(n<2){
     return n;
    }else {
      int[] ans = new int[n];
          ans[0] = 1;
          ans[1] = 2;
          for(int i=2;i<n;i++) {
              ans[i]=ans[i-1]+ans[i-2];
          }
          return ans[n-1];
    }}
C語言陣列版：
#include <stdio.h>#include <stdlib.h> int main(){   
     int n,s,L;
     printf("輸入長度");
     scanf("%d",&L);
     while(L<0)
     {
     printf("錯誤"); 
     return 0;
 }
     int a[L]; 
     int x=1,y=2;
     a[0]=x;
     a[1]=x;
     a[2]=y;
 for(n=3;n<L;n++)
 {  
 a[n]=a[n-1]+a[n-2];  
 }
       for(n=0;n<L;n++)
     {
         printf("%d ",a[n]);
     }
     system("pause");
     return 0;}