39.兔子数列(斐波那契数列)

  • Post author:
  • Post category:其他




编程题目:


39.兔子数列:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?



示例代码:

package program.calculation.exercise39;

import java.util.Scanner;

/**
 * 39.兔子数列:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,
 * 假如兔子都不死, 问每个月的兔子对数为多少?
 * 分析: 兔子的规律可视为斐波那契数列1,1,2,3,5,8,13,21....
 * 斐波那契数列(Fibonacci sequence):数列从第3项开始,每一项都等于前两项之和。
 * 又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,
 */

public class FibonacciSequence {
	public static void main(String[] args) {
		
		System.out.println("请输入月份:");
		@SuppressWarnings("resource")
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt();
		
		System.out.println("第一种方式:");
		int recurNumber = recurNumber(month);
		System.out.println("第"+month+"个月,兔子的总数为"+recurNumber+"对!");
		
		System.out.println("第二种方式:");
		int loopNumber = loopNumber(month);
		System.out.println("第"+month+"个月,兔子的总数为"+loopNumber+"对!");
		
	}
	
	//第一种方式:递归
	private static int recurNumber(int month) {
		if(1==month || 2==month){ //如果月份为1或2,结果为1
			return 1;
		}else { //否则,通过递归相加得出结果
			return recurNumber(month-1)+recurNumber(month-2);
		}
	}
	
	//第二种方式:循环
	private static int loopNumber(int month) {
		
		int number = 1;
		int temp1 = 1;
		int temp2 = 1;
		for (int i=1;i<=month;i++) {
			if(i <= 2) { //如果月份为1或2,结果为1
				number = 1;
			}else {
				number = temp1+temp2; //把所有月份相加
				temp2 = temp1;  //把第一个月赋值给第二个月
				temp1 = number; //把前两个月之和赋值给第一个月
			}
		}
		return number;
		
	}
	
}



结果显示:

在这里插入图片描述



版权声明:本文为jsc123581原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。