为什么斐波那契递归过程可以工作这么长时间?
这是在 OCaml 中:
let rec fib n = if n<2 then n else fib (n-1) + fib (n-2);;
这是在 Mathematica 中:
Fib[n_] := If[n < 2, n, Fib[n - 1] + Fib[n - 2]]
这是在Java中:
public static BigInteger fib(long n) {
if( n < 2 ) {
return BigInteger.valueOf(n);
}
else {
return fib(n-1).add(fib(n-2));
}
}
因为n=100
它可以工作很长时间,因为我猜它会2^100
及时跟踪带有节点的树。
虽然只有 100 个数字要生成,所以它只消耗 100 个内存寄存器和 100 个计算节拍。
因此,可以优化执行。
这个任务是关于什么的,它是如何解决的?由于解决方案没有在 Mathematica 中实现,它可能不存在。关于这个问题的研究如何?