牛客网-------递归与循环

题目一 :斐波那契数列

                                                     

//递归实现 严重超时
    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)

猜你喜欢

转载自blog.csdn.net/qq_40516725/article/details/84638144