【題目】
給定整數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...