JAVA编程练习:兔子问题

题目:古典问题:有一对兔子,从出生后第

3

个月起每个月都生一对兔子,小兔

子长到第三个月后每个月又生一

  

 

对兔子,假如兔子都不死,问每个月的兔子总数为多少?

第一天写博客,开始研究JAVA算法和设计模式,逐渐积累经验。同时也会继续研究C语言开发嵌入式系统。

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一   

对兔子,假如兔子都不死,问每个月的兔子总数为多少?


程序分析:每个月兔子的对数为:1,1,2,3,5,8,13,21……

即每个月兔子的总数都是前两个月兔子总数之和(前两个月除外)。本问题属于最基本的递归算法,程序如下:

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



上述方法中只需要计算一次即可,无重复运算,减少资源占用。

你可能感兴趣的:(JAVA算法练习,java算法,递归算法,编程,java)