下面,我想介绍一下fibonacci(斐波那契数列)的大兄弟,tribonacci数列。
正如它的名字所暗示的那样,它和斐波那契数列方式很相像,但又有不同的地方。
如果我们用[1,1,1]开始这个数列,我们将得到如下的结果:
[1,1,1,3,5,9,17,31,...]
大家可以看到,第四项3是第一、二、三项之和,第五项5是第二、三、四项之和,以此类推......
那如果用[0,0,1]开始这个数列,会得到怎样的结果呢?
[0,0,1,1,2,4,7,13,24,...]
看了这个例子,你大概已经猜出了规律:除了用作初始序列的前三个数字,以后的每一个数字都是等于它前面最近的三个数字之和。
再对比斐波那契数列,规律是:除了用作初始序列的前两个数字,以后的每一个数字都是等于它前面最近的两个数字之和。
现在,你明白为啥我说它俩是兄弟了吧?
甚至,按照这样的规律,还可以引申为xbonacci数列,不过这个题目我只聊聊tribonacci数列。
好了,想想怎么实现一个构造tribonacci数列的方法吧!
它接收两个参数,第一个参数作为初始化序列,是个数组。第二个参数是数字,表示要生成多少项数列。
返回值,自然是生成了新项后的数列数组。
对于这个问题,要区分两种情况:
第一种,这个初始化序列如果大小为3,但我只要生成2项该怎么办?答案很简单,直接对初始化数组截取前2项,就ok。
第二种情况,要求生成初始化序列之外的项,也很简单,像生成斐波那契数列一样,一个循环,新项由前面最近三项相加构成,以此类推。
function tribonacci(signature,n){
var startPoint = 0;
if(n < signature.length){
return signature.slice(0,n);
}
for(var i=startPoint+signature.length;i<n;i++){
signature[i] = signature[startPoint] + signature[startPoint+1] + signature[startPoint+2];
startPoint++;
}
return signature;
}以上就是 JavaScript趣题:Tribonacci数列的内容,更多相关内容请关注PHP中文网(www.php.cn)!
本文档主要讲述的是Python之模块学习;python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题。模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用,除了系统默认的模块(内置函数)不需要导入外。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
2
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号