1. 程式人生 > >牛客網-------遞迴與迴圈

牛客網-------遞迴與迴圈

題目一 :斐波那契數列

                                                     

//遞迴實現 嚴重超時
    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

-1)的大矩形的填充

第一步如果選擇橫方向的填充,則第二排的前面兩個小矩形也只能如此填充,那麼該問題的規模就縮減為對於剩餘的2×(number-2)的大矩形的填充

rectCover(number)=rectCover(number-1)+rectCover(number-2)