joh*_*ual 4 memoization dynamic-programming elm
这是Elm语法页面上的Fibonacci代码.好奇的是递归需要记忆还是懒惰的评估会照顾它?
fib n = case n of
0 -> 1
1 -> 1
_ -> fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)
在其他语言(例如Python)中,函数调用的数量将呈指数级增长,n因此if f(30)将计算f(10)为4000次或某些.
Haskell 这个斐波那契函数如何记忆?
查看已编译的源代码(从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);
}
};
Run Code Online (Sandbox Code Playgroud)
Javascript没有自动记忆,因为函数调用不能保证是确定性的.如果您需要备忘录,则必须自己动手.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |