打印兔子数列
本帖最后由 马黑黑 于 2023-1-28 21:17 编辑 <br /><br /><style>.chj_code {
position: relative;
margin: 10px 0 10px 60px;
border-left: 2px solid tan;
font: normal 16px/20px Consolas, Monaco, monospace;
}
.chj_code > p {
margin: 3px 0 3px 10px;
position: relative;
white-space: pre-wrap;
tab-size: 4;
}
.chj_code > p::before {
position: absolute;
width: 40px;
left: -55px;
content: attr(data-line);
text-align: right;
color: #ccc;
}
</style>
兔子数列又称裴波那契数列,因为其发明者是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,1170—1250)。说的是,假如一对兔子第三个月龄就拥有繁殖能力,且此后每个月可以且只生一对小兔崽子(一胎政策严格执行),辣么,假如给你一对成年兔子,请问:往下每一个月你能拥有多少对兔子?<p></p><div><br></div><div><span id="kM0.7062195988500775">@辫子哥哥 回答:1,1,<font color="#ff0000">2</font>,3,5,8,13,21,34,55,89,……&*……%</span><br></div><div><span><br></span></div><div>辫子哥哥没能答上来的是省略号后面,一般而言,辫子哥哥都数不出超过100的数,发工资时给它发 99 元就可以了,大家要理解。嗯,作为资深杀猪佬,我有义务将省略号后面的答案公布一下:</div><div><br></div><div> (n-2) + (n-1) (n≥2,n∈N*)</div><div><br></div><div>上述公式,说的是:辫子哥哥的线性数列中,从第三项(数列中的<font color="#ff0000">2</font>)开始,每一项均等于前两项之和。这个算法就是兔子数列算法,即每一对新兔子从第三个月开始生一对崽而后兔子对数的变化;其实也是黄金分割的依据,辫子哥哥的亿万个理想之一就是自己250岁的时候能拥有满嘴的金牙。</div><div><br></div><div>好了,废话不多说,我们现在可以用 JS 来打印这些数列。</div><div><br></div><div>递归法完成这个事可能最简单,不过,递归运行慢,还容易造成死循环或者因兔子太多运行栈溢出而出错,所以,我们可以用 for 循环来完成这个工作,简单高效没问题没错误。下面是我编写的代码:</div><div><br></div><div><br></div>
<div class="chj_code">
<p><<span style="color:darkred">div</span> <span style="color: red">id</span><span style="color: blue">=</span><span style="color: magenta">"mydiv"</span>><<span style="color: darkred">/div</span>></p>
<p><br?< p="">
</br?<></p><p><script></p>
<p><br?< p="">
</br?<></p><p><span style="color: blue">let</span> total = 50; <span style="color: green">//声明兔子数列第几位</span></p>
<p><span style="color: blue">let</span> febAr = []; <span style="color: green">//声明存储兔子数列的数组</span></p>
<p><span style="color: blue">let</span> febNum; <span style="color: green">//声明兔子数列数</span></p>
<p><br?< p="">
</br?<></p><p><span style="color: blue">for</span>(i = 0; i < total; i++) {</p>
<p> <span style="color: blue">if</span> (i>=2) {</p>
<p> febNum = febAr + febAr;</p>
<p> } <span style="color: blue">else</span> {</p>
<p> febNum = 1;</p>
<p> }</p>
<p> febAr.push(febNum);</p>
<p>}</p>
<p><br?< p="">
</br?<></p><p>mydiv.innerText = febAr.join(<span style="color: magenta">', '</span>);</p>
<p><br?< p="">
</br?<></p><p></script></p>
</div>
<p><br>这里,我们用一个 div 来装载打印结果,这个容易看得出来。JS中,用一个 for 循环,将兔子序列数一一压进数组,最后将数组元素打印到 div 中。效果请看下楼。</p>
<script>
(function setLineNum() {
let code_papas = document.querySelectorAll('.chj_code');
Array.from(code_papas).forEach( (item,key) => {
let pps = item.children;
Array.from(pps).forEach( (p,pkey) => {
p.setAttribute('data-line', pkey + 1);
});
});
})();
</script> <div id="mydiv"></div>
<script>
let total = 50; //声明兔子数列第几位
let febAr = []; //声明存储兔子数列
let febNum; //声明兔子数列数
for(i = 0; i < total; i++) {
if (i>=2) {
febNum = febAr + febAr;
} else {
febNum = 1;
}
febAr.push(febNum);
}
mydiv.innerText = febAr.join(', ');
</script> @辫子哥哥 到21词的时候就已经过万了,按这样的数列算下去,小兔子如果一直不死,用不了多久就泛滥成灾了{:4_173:} febNum = febAr + febAr;
JS里直接就有这个公式啊,厉害了{:4_199:} 红影 发表于 2023-1-28 22:06
febNum = febAr + febAr;
JS里直接就有这个公式啊,厉害了
这公式是自己编写的。JS提供方法,思路自己去完成。 红影 发表于 2023-1-28 22:05
到21词的时候就已经过万了,按这样的数列算下去,小兔子如果一直不死,用不了多久就泛滥成灾了
兔子泛滥成灾的现象还真有。两个典型的例子:
一个在英国。英国草地多,又喜欢小动物,野生兔子一般没人去侵扰。但公路上,兔子被意外碾死的比较多。
另一个在澳洲。本来,澳洲没有兔子,是移民当宠物带过去的,因繁殖太快,弃之,没想到它们在野外更容易生存,一下子成灾。 专业的文字组,我就是羡慕一下。 马黑黑 发表于 2023-1-28 23:10
这公式是自己编写的。JS提供方法,思路自己去完成。
哦,对,JS可以做循环,就不需要列式做手工裴波那契数列计算了。黑黑聪明,JS太适合做这个数列的计算了{:4_199:}
(n-2)和(n-1)其实是下标,把它们看成是数字就偏了。我一个不小心就偏到岔路上去了。 马黑黑 发表于 2023-1-28 23:13
兔子泛滥成灾的现象还真有。两个典型的例子:
一个在英国。英国草地多,又喜欢小动物,野生兔子一般没 ...
还有个例子是德国的螃蟹,因为没有天敌,也成灾了。对喜欢吃螃蟹的国人来说,真是好消息{:4_173:} 红影 发表于 2023-1-29 09:40
还有个例子是德国的螃蟹,因为没有天敌,也成灾了。对喜欢吃螃蟹的国人来说,真是好消息
还有英国的鲤鱼,大得不得了,他们不吃,也不去伤害,但每年会对国外钓友开放一段时间 红影 发表于 2023-1-29 09:38
哦,对,JS可以做循环,就不需要列式做手工裴波那契数列计算了。黑黑聪明,JS太适合做这个数列的计算了{: ...
JS作为语言,循环还是比较成熟的 庶民来了 发表于 2023-1-29 04:40
专业的文字组,我就是羡慕一下。
{:4_190:} 马黑黑 发表于 2023-1-28 20:31
@辫子哥哥
来了来了{:4_187:} 可惜我是睁眼瞎{:4_203:} 其他都可以不理睬,这满嘴的金牙肯定喜欢的,因为金牙在我口中,是自己的东西,当然可以变现了{:4_170:} 辫子哥哥 发表于 2023-1-29 12:40
其他都可以不理睬,这满嘴的金牙肯定喜欢的,因为金牙在我口中,是自己的东西,当然可以变现了
吐出来就变现了{:5_106:} 辫子哥哥 发表于 2023-1-29 12:35
来了来了
{:4_190:} 辫子哥哥 发表于 2023-1-29 12:36
可惜我是睁眼瞎
{:4_180:} 马黑黑 发表于 2023-1-29 12:08
JS作为语言,循环还是比较成熟的
我去搜了一下,用裴波那契数列为边长,做出的弧线特别漂亮,而其这个数列还有很多神奇之处。