2016-05-17 9 views
0

私は以下のようなSMLコードを持っています。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)が必要ですか?私は正確にはわからない。

答えて

3

はい、作成した関数は最後に評価する前にnクロージャを作成します。これは、再帰呼び出しを行うのではなく、それを遅らせ、それが末尾再帰行う前にn*resultを解決

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

:ここ

は、より多くのスペース効率に優れたバージョンです。

関連する問題