牛客網-------遞迴與迴圈
阿新 • • 發佈:2018-12-07
題目一 :斐波那契數列
//遞迴實現 嚴重超時 public int fobonacci(int n){ if((n==0)||(n==1)){ return n; }else{ return fobonacci(n-1)+fobonacci(n-2); } }
方法二 :利用迴圈
public static int fibonacci1(int n) {
int a=0;int b=1;int c=0;
if(n==0||n==1){return n;}
for(int i=2;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
題目二 臺階問題 1,2,3,5,8,.......f(n)+f(n-1)
public static int JumpFloor(int target) { int a=1;int b=2;int c=0; if(target==1||target==2){ return target; } for(int i=3;i<=target;i++){ c=a+b; a=b; b=c; } return c; }
題目三 變態臺階問題 f(n)=f(n-1)+f(n-2)+.....+f(2)+f(1)+1
public static int JumpFloorII(int target) {
int a=1;int b=0;
if(target==1){return target;}
for(int i=2;i<=target;i++){
b=2*a;
a=b;
}
return b;
}
題目四:矩形覆蓋
第一步如果選擇豎方向填充,那麼該問題的規模就縮減為對於剩餘的2×(number
第一步如果選擇橫方向的填充,則第二排的前面兩個小矩形也只能如此填充,那麼該問題的規模就縮減為對於剩餘的2×(number-2)的大矩形的填充
rectCover(number)=rectCover(number-1)+rectCover(number-2)