Dynamic programming 这个Elm-Fibonacci例子需要记住吗?

Dynamic programming 这个Elm-Fibonacci例子需要记住吗?,dynamic-programming,elm,memoization,Dynamic Programming,Elm,Memoization,下面是Elm语法页面上的斐波那契代码。好奇的是,递归需要被记忆,还是懒惰的求值处理了它 fib n = case n of 0 -> 1 1 -> 1 _ -> fib (n-1) + fib (n-2) 在其他语言(如Python)中,函数调用的数量在n中会呈指数级增长,因此在iff(30)中,函数调用的次数会计算f(10)大约4000次 哈斯克尔 蟒蛇 查看编译后的源代码(从Elm 0.18开始),您将看到Elm代码被转换为以下javascript代码(变量

下面是Elm语法页面上的斐波那契代码。好奇的是,递归需要被记忆,还是懒惰的求值处理了它

fib n = case n of
  0 -> 1
  1 -> 1
  _ -> fib (n-1) + fib (n-2)
在其他语言(如Python)中,函数调用的数量在
n
中会呈指数级增长,因此在if
f(30)
中,函数调用的次数会计算
f(10)
大约4000次

  • 哈斯克尔

  • 蟒蛇


查看编译后的源代码(从Elm 0.18开始),您将看到Elm代码被转换为以下javascript代码(变量名称可能不同)

var\u用户$project$temp14837213771847322$fib=function(n){
var _p0=n;
开关(p0){
案例0:
返回1;
案例1:
返回1;
违约:
返回用户$project$Temp1483721371847322$fib(n-1)+用户$project$Temp1483721371847322$fib(n-2);
}
};

Javascript不会自动记忆,因为函数调用不能保证是确定性的。如果你需要回忆录,你必须自己翻录。

啊!非常感谢。像往常一样,Elm映射到JavaScript,而其他语言都没有这种优秀的优化