我的SML代码需要多少空间?

时间:2016-05-17 03:23:01

标签: sml space-complexity

我有如下的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;

我想知道我的代码中需要多少空间来计算事实(n)。 是不是需要O(n)?我完全不知道。

1 个答案:

答案 0 :(得分:3)

是的,您编写的函数在最后评估它们之前会创建 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,而不是延迟它,使其成为尾递归。

相关问题