JAVAプログラミング練習:うさぎ問題


标题:古典問題:生まれた時から
3
ヶ月から毎月ウサギとウサギのペアが生まれます.
子は三ヶ月目になってから毎月また生まれます.
  
 
ウサギに対して、もしウサギが死なないならば、毎月のウサギの総数はいくらですか?
初日にブログを書いて、JAVAのアルゴリズムと設計モデルを研究し始めて、次第に経験を蓄積します.C言語開発組み込みシステムの研究も継続する.
テーマ:古典的な問題:1対のウサギがあって、生後の第3ヶ月から毎月すべて1対のウサギを生んで、小さいウサギは第3ヶ月まで成長した後に毎月また1対のウサギを生みます
ウサギに対して、もしウサギが死なないならば、毎月のウサギの総数はいくらですか?
プログラム分析:毎月ウサギの対数は:1,1,2,3,5,8,13,21......
つまり、毎月のウサギの総数は、前の2ヶ月のウサギの総数の和(前の2ヶ月を除く)です.本問題は最も基本的な再帰アルゴリズムに属し、プログラムは以下の通りである.
public class TextOne(){

		public static void rabbit(){
			
			int rabbitNum=1;  //     
			System.out.print("           :");
			Scanner sc=new Scanner(System.in);
			int month=sc.nextInt();
			for(int i=1;i<=month;i++){
				rabbitNum=getMonthNum(i);
				System.out.println(" "+i+"       :"+rabbitNum);
			}
		}
		
		public static int getMonthNum(int month){
			
			//         ,    1
			if(month==1||month==2){
				return 1;
			}
			return getMonthNum(month-1)+getMonthNum(month-2); //            
		}
}

上記の方法は再帰的な方法を用いてプログラムを簡略化して短縮するが、月が大きすぎると大量の繰り返し演算消費資源が発生し、以下により便利な方法がある.
public class textTwo(){

	public static void rabbit{
	
		int n1,n2,n3,month;   //n1,n2,n3            
		System.out.print("           :");
		Scanner sc=new Scanner(System.in);
		month=sc.nextInt();
		n1=1;
		n2=1;
		System.out.println(" 1       :"+n1);
		System.out.println(" 2       :"+n2);
		//    ,      
		for(int i=1;i

上記の方法では1回計算するだけでよいが,繰返し演算がなく,リソース占有を低減する.