Fibonacci數列及相關問題

2021-07-27 20:36:19 字數 2659 閱讀 8121

給定正整數n, 求解fibonacci數列第n項的值;

給定正整數n, 代表台階, 一次可以跨2個或者1個台階, 有多少走法

假設成熟的母牛只會生1頭小母牛, 並且永遠不會死, 第一年農場有1只成熟的母牛,從第二年開始, 母牛開始生小母牛. 每只小母牛3年之後成熟. 給定正整數n, 求出n年後牛的數量.

遞迴的解法是最基礎, 也是最好理解, 但是時間複雜度很高, 為 o(

2n) ,空間複雜度為o(2^n)

public

static

intfibrecursion(int n)

if (n == 1)

return fibrecursion(n - 1) + fibrecursion(n - 2);

}

迭代的解法即將已經解決的位置處的數儲存, 之後直接呼叫, 不用再計算

時間複雜度為o(n), 空間複雜度為o(n).

public

static

intfibiteration(int n)

if (n == 0)

int arr = new

int[n + 1];

arr[0] = 0;

arr[1] = 1;

for (int i = 2; i < n + 1; i++)

return arr[n];

}

僅記錄前兩個值, 空間複雜度為o(1)

public

static biginteger fibiteration(int n)

if (n == 0)

biginteger res = new biginteger("0");

biginteger pre_1 = biginteger.valueof(1);

biginteger pre_2 = biginteger.valueof(0);

for (int i = 2; i < n + 1; i++)

return res;

}

f(

n)=f

(n−1

)+f(

n−2)

⇒∣∣f

(n)f

(n−1

)∣∣=

∣∣f(

n)f(

n−1)

∣∣×∣

∣∣∣a

cbd∣

∣∣∣

解得:a=1

b=1c

=1d=

1 即: ∣∣f

(n)f

(n−1

)∣∣=

∣∣f(

n−1)

f(n−

2)∣∣

×∣∣∣

∣111

0∣∣∣

∣⇒∣∣

f(n)

f(n−

1)∣∣

=|11

|×∣∣

∣∣11

10∣∣

∣∣n−

2

public

static biginteger fibmatrix(int n)

if (biginteger.one.compareto(biginteger.valueof(n)) == 0)

return matrixpower(new

int, }, n)[0][0];

}//計算矩陣matrix的p次方

public

static biginteger matrixpower(int matrix, int p) throws illegalargumentexception

biginteger res = new biginteger[matrix.length][matrix.length];

for (int i = 0; i < res.length; i++)

}for (int i = 0; i < res.length; i++)

biginteger tmp = new biginteger[matrix.length][matrix.length];

for (int i = 0; i < tmp.length; i++)

}while (p > 0)

tmp = multimatrix(tmp, tmp);

p = p >> 1;

}return multimatrix(new biginteger}, res);

}//矩陣乘法

public

static biginteger multimatrix(biginteger m1, biginteger m2) throws illegalargumentexception

biginteger res = new biginteger[m1.length][m2[0].length];

for (int i = 0; i < m1.length; i++)

}for (int i = 0; i < m1.length; i++) }}

return res;

}

當n=45時, 遞迴的方法就需要6794ms才能完成.

當n=1000000時, 迭代的方法耗時16s左右, 使用矩陣的方法只需耗時1.266s即完成

演算法 Fibonacci(斐波那契數列)相關問題

一 列出fibonacci數列的前n個數 using system using system.collections.generic using system.linq using system.text namespace fibonacci 需求 列出fibonacci數列的前n個數 方案一 迭...

Fibonacci數列(動態規劃相關)

問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。樣例輸入 10樣例輸出 55樣例輸入 ...

藍橋杯Fibonacci數列的遞推公式問題

fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。說明 在本題中,答案是要求fn除以10007的餘...