首页 > web前端 > js教程 > 正文

JavaScript趣题:Tribonacci数列

黄舟
发布: 2017-02-04 15:10:33
原创
1740 人浏览过

下面,我想介绍一下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)!


来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!