gpt4 book ai didi

javascript - 为什么在 javascript 中计算斐波那契比在 haskell 中更快?

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:44 25 4
gpt4 key购买 nike

正如您在下面的示例中看到的,javascript/node 比 haskell 快得多。
但是 haskell 是基于 C 编译的。在示例中,您会看到 C 是最快的。相比之下,haskell 怎么这么慢?

节点执行的JS:

function fib(n) {
if ( n==0 || n==1 )
return 1;

return fib(n-2)+fib(n-1);
}
console.log(fib(30));

$ time node fib.js
1346269
real 0m0,045s
user 0m0,040s
sys 0m0,004s

haskell :

fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = print (fib 30)

$ ghc -o fibh fib.hs
$ time ./fibh
1346269
real 0m0,178s
user 0m0,168s
sys 0m0,000s

c:

#include <stdio.h>

int fib(int n) {
if (n == 0 || n == 1)
return 1;

return fib(n-1)+fib(n-2);
}

int main() {
int f = fib(30);
printf("cfib: %i\n", f);
}

$ gcc fib.c -o fibc
$ time ./fibc
cfib: 1346269
real 0m0,023s
user 0m0,020s
sys 0m0,000s

编辑1:

像建议的那样使用-O2 的haskell

$ ghc -O2 -o fibh fib.hs
$ time ./fibh
1346269
real 0m0,166s
user 0m0,160s
sys 0m0,004s

最佳答案

只是因为GMPInteger和机器Int的区别:

% cat fib.hs
fib :: Int -> Int -- N.B. default is `Integer`
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = print (fib 30)


% ghc -O2 fib.hs && time ./fib
1346269
./fib 0.01s user 0.00s system 87% cpu 0.013 total

关于javascript - 为什么在 javascript 中计算斐波那契比在 haskell 中更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com