一般而言,兔子在出生二个月后,就有繁殖能力(即如果是第一个月出生,则第三个月开始才能繁殖),一对兔子每个月能生出一对小兔子。如果所有兔子都不死,那么一对兔子一年内能繁殖成多少对兔子?
分析:
(红色表示该对兔子本月不可生)
1、第1个月,只有一对兔子 a,数量为 1
2、第2个月,原兔子下月才能生,只有一对兔子 a ,则数量为 1
3、第3个月,原兔子 a 生出一对小兔 a1,则数量为 2
4、第4个月,原有兔子 a 和 a1;a 生一对小兔 a2,则数量为 3
5、第5个月,原有兔子 a、a1、 a2;a 和 a1 各生下一对,分别为 a3 和 a4,则数量为 5
6、第6个月,原有兔子 a、a1、 a2、a3、a4;a、a1、 a2各生下一对为a5、a6、a7,则数量为 8
7、第7个月,原有兔子 a、a1、 a2、a3、a4、a5、a6、a7;a、a1、 a2、a3、a4各生下一对为a8、a9、a10、a11、a12,则数量为 13
以此类推,可以得出如下数据:
月数:1---2---3---4---5---6---7---8---9---10---11---12
对数:1---1---2---3---5---8--13--21--34--55--89--144
每个月所呈现的兔子数构成了一个数列,这个数列的特点就是相邻两项的和构成了后一项的值。
顺推法实现如下:
var fibfunc = function(n) {
var arr = [];
for(var i=0; i<n; ++i) {
if(i === 0 || i === 1) {
arr.push(1);
} else {
arr.push(arr[i-1] + arr[i-2]);
}
}
return arr[n-1];
}
//输入月数
console.log(fibfunc(9));
递归法实现如下:
var fibfunc = function(n) {
var sum = 0;
if(n === 0 || n === 1) {
return n;
} else {
return fibfunc(n-1) + fibfunc(n-2);
}
}
//输入月数
console.log(fibfunc(9));