这是Elm语法页面上的Fibonacci代码。好奇的是,递归需要记忆还是懒惰的评估需要处理它?</ p>
fib n = case n of
0 -> 1
1 -> 1
_ -> fib (n-1) + fib (n-2)
在其他语言(例如Python)中,函数调用的数量会在n
中呈指数级增长,因此如果f(30)
计算f(10)
就像4000次或者某些。
答案 0 :(得分:5)
查看已编译的源代码(从Elm 0.18开始),您将看到Elm代码被编译为以下javascript代码(变量名称可能不同)。
var _user$project$Temp1483721371847322$fib = function (n) {
var _p0 = n;
switch (_p0) {
case 0:
return 1;
case 1:
return 1;
default:
return _user$project$Temp1483721371847322$fib(n - 1) + _user$project$Temp1483721371847322$fib(n - 2);
}
};
Javascript没有自动记忆,因为函数调用不能保证是确定性的。如果你需要记忆,你将不得不自己动手。