【问题标题】:How much space is required in my SML code?我的 SML 代码需要多少空间?
【发布时间】:2016-05-20 00:15:10
【问题描述】:

我有如下 SML 代码。

fun fact(n) =
    let fun f(n,g) = if n=0 then g(1)
                     else f(n-1, fn x=>g(x)*n)
in f(n, fn x=> x) end;

我想知道计算 fact(n) 的代码需要多少空间。 它需要O(n)对吗?具体我不知道。

【问题讨论】:

    标签: sml space-complexity


    【解决方案1】:

    是的,您编写的函数在最后评估它们之前创建了 n 个闭包。

    这是一个更节省空间的版本:

    fun fact n =
        let fun fact' 0 result = result
              | fact' n result = fact' (n-1) (n*result)
        in fact' n 1 end
    

    它在进行递归调用之前解析n*result,而不是延迟它,使其成为尾递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2020-12-04
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多