兔子算法问题

有一对兔子,从出生后的第三个月起开始生出一个小兔子,小兔子长到三个月大也开始生出小兔子,假如兔子不会死,问20个月后兔子总数 ?

1,1,2,3,5,8,13,21....第30个是什么...?


这两个题其实是一个题目。


这个问题有两种解决思路:for循环和递归算法



程序分析:

第一个月-----------------1

第二个月-----------------1

第三个月-----------------2

第四个月-----------------3

第五个月-----------------5

第六个月-----------------8

第七个月-----------------13


for循环:

  1. #include   
  2.   
  3. int main()  
  4. {  
  5.     int m[23];  
  6.     int i;  
  7.     m[0]=m[1]=1;  
  8.     for (i=0; i<24; i++) {  
  9.         if (i==0 || i==1) {  
  10.             printf("第%d个月月兔子数量为:1对\n",i+1);  
  11.         }  
  12.         else {  
  13.             m[i]=m[i-1]+m[i-2];  
  14.             printf("第%d个月月兔子数量为:%d对\n",i+1,m[i]);  
  15.               
  16.         }  
  17.     }  
  18.     return 0;  
  19. }  


递归:


package exam;


import java.util.Scanner;


public class diGui {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub


Scanner scaner = new Scanner(System.in);

int n = scaner.nextInt();

int value = new diGui().getValue(n);

System.out.println("第"+n+"位="+value);

}


public int getValue(int n) {


if (n<=0) {

return 0;
}else if(n>=0&&n<=2 ){
return 1;
}else {

return getValue(n-1)+getValue(n-2);

}


}
}



你可能感兴趣的:(算法)