备战蓝桥杯——算法经典趣题(渔夫捕鱼)递归,递推,循坏算法

                                 渔夫捕鱼

某天晚上,A,B,C,D,,E,5个渔夫合伙捕鱼,捕到一定数量之后就停止捕鱼,各自到岸边休息
。第一天早晨,渔夫A第一个醒来,他将鱼分作5份,把多余的一条仍会河中,
拿到其中自己的一份回家去了。渔夫B第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫C第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫D第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫E第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。问:这个渔夫至少捕到了多少条鱼?



 分析:每个渔夫醒来的时候,鱼的数量应该是5的倍数再加1
假设,最后一个渔夫E醒来之后,鱼的数量应该至少是6
,在他扔掉一条鱼之后,任然可以平均分5分
 那么渔夫D醒来应该:6*5+1=31  条鱼
    渔夫C醒来应该:31*5+1=156 条鱼
    渔夫B醒来应该:156*5+1=781 条鱼

    渔夫A醒来应该:781*5+1=3906条鱼


这道题目其实非常简单,我用了3中不同的算法:分别是递推,递归,循坏



public class P10_9 {

	public static void main(String[] args) {
        
              int s=0;
              int n=4;
             int    b=6;
       
          
              for(;;)  //使用循坏的方法
              {   	 
               if(n!=0){    b=b*5+1;  }
            	           n--;
            	if(n==0){  break;}
              }
              System.out.println(f(5));   //--递归调用
              System.out.println(b);      //--使用循坏
              System.out.println(fish(5)); //递推
	}
   public static int f(int n)   //递归算法
   {
	   int s=0;
	   if(n==1)  return 6;
	 
	   return f(n-1)*5+1;
   }
   public static int fish(int yufu)    //递推算法
   {
	   int init;
	   int n;
	   int s;
	    
	   init=yufu+1;
	   n=yufu-1;
	   
	   s=init;   //开始的时候s是等于6
	   while(n!=0)
	   {
		   s=5*s+1;
		   n--;
	   }
	   return s;
	   
   }
}


你可能感兴趣的:(蓝桥杯大赛备考)