我遇到了这个问题,它比较了各种编译器在计算斐波那契数字时的表现.
我尝试用Haskell做这个,看看它与C的比较.
C代码:
#include <stdio.h>
#include <stdlib.h>
int fib (int n) {
if (n < 2) return 1;
return fib (n-1) + fib (n-2);
}
int main (int argc, char* argv[]) {
printf ("%i\n", fib (atoi(argv[1])));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
> gcc -O3 main.c -o fib
> time ./fib 40
165580141
real 0m0.421s
user 0m0.420s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
哈斯克尔:
module Main where
import System.Environment (getArgs)
fib :: Int -> Int
fib n | n < 2 = 1
| …Run Code Online (Sandbox Code Playgroud) 我正在尝试将c与ocaml进行基本的微基准比较.我听说对于斐波纳契程序,c和ocaml大致相同,但我无法复制这些结果.我用gcc -O3 fib.c -o c-code编译c代码,并用ocamlopt -o ocaml-code fibo.ml编译OCaml代码.我通过使用时间./c-code和时间./ocaml-code计时.每次我这样做OCaml需要0.10秒,而c代码每次约为0.03秒.除了这是一个天真的基准,有没有办法让ocaml更快?谁能看到他们电脑上的时代是什么?
C
#include <stdio.h>
int fibonacci(int n)
{
return n<3 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}
int main(void)
{
printf("%d", fibonacci(34));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OCaml的
let rec fibonacci n = if n < 3 then 1 else fibonacci(n-1) + fibonacci(n-2);;
print_int(fibonacci 34);;
Run Code Online (Sandbox Code Playgroud) 这是预期的输出:
替代文字http://i48.tinypic.com/f1lfuh.jpg
我们要制作一个计算Fibonacci序列的C程序.我们最多只允许3个变量,我们不允许使用循环.而且我不知道该怎么做以及如何开始.
我希望你们能帮助我.:/