请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2023-1-28 21:17 编辑
兔子数列又称裴波那契数列,因为其发明者是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,1170—1250)。说的是,假如一对兔子第三个月龄就拥有繁殖能力,且此后每个月可以且只生一对小兔崽子(一胎政策严格执行),辣么,假如给你一对成年兔子,请问:往下每一个月你能拥有多少对兔子?
@辫子哥哥 回答:1,1,2,3,5,8,13,21,34,55,89,……&*……%
辫子哥哥没能答上来的是省略号后面,一般而言,辫子哥哥都数不出超过100的数,发工资时给它发 99 元就可以了,大家要理解。嗯,作为资深杀猪佬,我有义务将省略号后面的答案公布一下:
(n-2) + (n-1) (n≥2,n∈N*)
上述公式,说的是:辫子哥哥的线性数列中,从第三项(数列中的2)开始,每一项均等于前两项之和。这个算法就是兔子数列算法,即每一对新兔子从第三个月开始生一对崽而后兔子对数的变化;其实也是黄金分割的依据,辫子哥哥的亿万个理想之一就是自己250岁的时候能拥有满嘴的金牙。
好了,废话不多说,我们现在可以用 JS 来打印这些数列。
递归法完成这个事可能最简单,不过,递归运行慢,还容易造成死循环或者因兔子太多运行栈溢出而出错,所以,我们可以用 for 循环来完成这个工作,简单高效没问题没错误。下面是我编写的代码:
<div id="mydiv"></div>
<script>
let total = 50; //声明兔子数列第几位
let febAr = []; //声明存储兔子数列的数组
let febNum; //声明兔子数列数
for(i = 0; i < total; i++) {
if (i>=2) {
febNum = febAr[i-1] + febAr[i-2];
} else {
febNum = 1;
}
febAr.push(febNum);
}
mydiv.innerText = febAr.join(', ');
</script>
这里,我们用一个 div 来装载打印结果,这个容易看得出来。JS中,用一个 for 循环,将兔子序列数一一压进数组,最后将数组元素打印到 div 中。效果请看下楼。
|