斐波那契数列之不死神兔

 
斐波那契在《算盘书》中提出了一个有趣的兔子问题:

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;

package Test01;

/**
 * 斐波那契数列之不死神兔  				总数 
 * 分析:
 * 第个一月:1对小兔       				 1
 *  二月:1对小兔子长大变成1对大兔子 			 1
 *  三月:1对大兔生了1对小兔   				 2 
 *  四月:2大  1小                    			 3 
 *  五月 :3大 2小					 5			 
 * @author LuoJoy
 *
 */
public class Test1 {
	public static void main(String[] args) {
		// demo1();

		System.out.println(getNum(8));
	}

	private static void demo1() {
		// 第一种方法使用数组
		int[] arr = new int[8];
		arr[0] = 1;
		arr[1] = 1;
		// 从第三个开始,前两个月的兔子加起来等于第三个月
		for (int i = 2; i < arr.length; i++) {
			arr[i] = arr[i - 2] + arr[i - 1];
		}
		// 得到第8个月的兔子总数,其实就是数组的最后一个下标所对应的值
		System.out.println(arr[arr.length - 1]);
	}

	// 第二种做法,采用递归,把每一个月的兔子数量作为方法的返回值
	public static int getNum(int num) {

		if (num == 1 || num == 2) {

			return 1;
		} else {

			
			return getNum(num - 2) + getNum(num - 1);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/luo609630199/article/details/80727343