这个Elm Fibonacci的例子需要记忆吗?

时间:2017-01-06 16:48:21

标签: dynamic-programming elm memoization

这是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次或者某些。

1 个答案:

答案 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没有自动记忆,因为函数调用不能保证是确定性的。如果你需要记忆,你将不得不自己动手。