Javascript斐波那契

vet*_*i02 4 javascript fibonacci

function fibo() {
var first,second,add;
for(var i=0;i<4000;i++){
    if(i === 0){
        first = 1;
        second = 2;
    }
    add = first + second;
    first = second;
    second = add;

}

alert(add);

}

fibo();
Run Code Online (Sandbox Code Playgroud)

不工作显示无限为什么?

sid*_*yll 17

简单:因为它太大了.

第300个术语是222232244629420445529739893461909967206666939096499764990979600,所以你可以想象第4000个有多大.您不能在JavaScript变量中保留此值.

如果你真的想要计算它,可以使用任意精度库,如果你想快速计算它,可能还有JavaScript以外的东西.

检查GNU多精度算术库 - GMP.很高兴与C一起使用,它甚至具有特殊的Fibonacci功能.


这是一个小C程序来完成这项工作:

#include <gmp.h>

int main()
{
    mpz_t num;
    mpz_init(num);

    mpz_fib_ui(num, 4000);
    gmp_printf("%Zd\n", num);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

cc fib.c -lgmp

并运行:-)

time ./a.out
39909473435004422792081248094960912600792570982820257852628876326523051818641373433549136769424132442293969306537520118273879628025443235370362250955435654171592897966790864814458223141914272590897468472180370639695334449662650312874735560926298246249404168309064214351044459077749425236777660809226095151852052781352975449482565838369809183771787439660825140502824343131911711296392457138867486593923544177893735428602238212249156564631452507658603400012003685322984838488962351492632577755354452904049241294565662519417235020049873873878602731379207893212335423484873469083054556329894167262818692599815209582517277965059068235543139459375028276851221435815957374273143824422909416395375178739268544368126894240979135322176080374780998010657710775625856041594078495411724236560242597759185543824798332467919613598667003025993715274875

real    0m0.005s
user    0m0.001s
sys     0m0.002s

  • `perl -M'Math :: BigInt lib => GMP'-E'我的$ a = Math :: BigInt-> new(0); 我的$ b = Math :: BigInt-> new(1); for(3..4000){$ c = $ a + $ b; $ a = $ b; $ b = $ c}说$ c'` :-P (2认同)

Mik*_*gan 12

好吧,这是非常迟到了,但只是为了完整起见,这里是一个纯JavaScript解决方案.它使用了几个库.

你需要biginteger(http://silentmatt.com/biginteger/)和懒惰(https://github.com/rfw/sloth.js).该解决方案还需要Javascript 1.7 Generators(请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators).

var window = {};
load('biginteger.js');
load('sloth.js');
var sloth = window.sloth;


function fibonacci(){
  var fn1 = new BigInteger(1);
  var fn2 = new BigInteger(1);

  while (1){
    var current = fn2;
    fn2 = fn1;
    fn1 = fn1.add(current);
    yield current;
  }
}

var iter = sloth.iter(fibonacci());
var some = sloth.ify(iter).take(4000).force();
print(some[299]); 
print(some[3999]);
Run Code Online (Sandbox Code Playgroud)

代码有点古怪(使用load()和window),因为我想在rhino中测试它,而不添加npm支持.如果这让你困惑,只是假装你看到了require()调用:)