斐波那契系列問題的遞迴和動態規劃2

2021-08-15 09:24:36 字數 1483 閱讀 2434

【題目】

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

【舉例】

n=3,可以三次都跨1個台階;也可以先跨2個台階,再跨1個;或者先跨1個,再跨2個。所以有三種走法,返回3.

【**】

public

static

void

main(string args)

//給定台階數,返回走法數

//方法1:暴力遞迴,o(2^n)

public

static

ints1(int n)

if(n==1||n==2)

//最後跳上第n級的情況,要麼是從n-2級直接跨2級跳上,要麼是從n-1級跨1級跳上

//故 s(n)=s(n-1)+s(n-2)

//類似斐波那契數列,唯一的不同是初始項不同

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

}//方法2:依次從左到右求出每一項的值,o(n)

public

static

ints2(int n)

if(n==2||n==1)

int res=2;//初始第二項

int pre=1;//初始第一項

int temp=0;

for(int i=3;i<=n;i++)

return res;

}//方法3:矩陣乘法思想,o(logn)

//(s(n),s(n-1))=(2,1)×,}^(n-2)

public

static

ints3(int n)

if(n==2||n==1)

int base=,};

int res=matrixpower(base,n-2);//狀態矩陣的n-2次方

return

2*res[0][0]+res[1][0];

}

【題目】(青蛙**跳)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

【思路】

假設跳上第n個台階有f(n)種方法,則f(1)=1,f(2)=2,f(3)=4,f(4)=8,我們隱約感覺到f(n)=2^(n-1)。但是需要證明下,同樣根據我們根據上篇文章中跳台階的思路,可以得到f(n)=f(n-1)+f(n-2)+….+f(1)+1,而f(n-1)=f(n-2)+….+f(1)+1,兩個式子相減,得到f(n) = 2f(n-1),很明顯可以得到f(n)=2^(n-1)。

【**】

public

intjumpfloorii(int target)

return res;

}

斐波那契系列問題的遞迴和動態規劃3

題目 假設農場中成熟的母牛每年只會生1頭小母牛,並且永遠不會死。第一年農場有1只成熟的母牛,從第二年開始,母牛開始生小母牛。每只小母牛3年之後成熟又可以生小母牛。給定整數n,求出n年後牛的數量。舉例 n 6,第1年1頭成熟母牛記為a 第2年a生了新的小母牛,記為b,總牛數為2 第3年a生了新的小母牛...

遞迴 斐波那契

題 若一頭小母牛,從出生起第四個年頭開始每年生一頭母牛,按此規律,第n年有多少頭母牛?具體分析 1 分析題目 從出生起第四個年頭開始每年生一頭母牛 時間 年 未成熟母牛 頭 成熟母牛 頭 母牛總數 頭 1 1 0 1 2 1 0 1 3 1 0 1 4 0 1 1 5 1 1 2 6 2 1 3 7...

斐波那契遞迴

const fib1 n if n 0 else if n 1 else console.log fib1 5 函式呼叫順序 fib1 5 fib1 4 fib1 3 fib1 2 fib1 1 fib1 0 fib1 1 fib1 2 fib1 1 fib1 0 fib1 3 fib1 2 fib...