先上代码。
Julia:
fib(n ) =n<2? n: fib(n-1)+fib(n-2);
Rust:
由于Julia默认的整形是Int64,所以,为了公平起见,Rust的fib参数也用i64. 当然,如果用i32速度会略快一点。
extern crate stopwatch;
use stopwatch::{Stopwatch};
//一般fp风格
fn fib(n:i64)->i64
{
if n< 2 {
return n ;
}
else {
return fib(n-2) + fib(n-1);
}
}
//rust风格
fn fib(x: i64) -> i64 {
match x<2 {
true => x,
_ => fib(x - 2) + fib(x - 1),
}
}
fn main() {
let nums:Vec<i64> = vec![30_i64,35,40,45];
for n in nums {
let sw = Stopwatch::start_new();
let value = fib(n);
println!("n:{0} recur value :{1} It took {2:.8} ms",n,value,sw.elapsed_ms());
}
}
效率PK:
Rust:
在Atom中运行
Julia:
有图有真相。