您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JavaScript趣题:Tribonacci数列

2024/6/5 12:09:15发布25次查看
下面,我想介绍一下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数列的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product