SML计算调用和激活记录,迭代算法的效率

时间:2016-03-03 19:31:21

标签: algorithm runtime sml

这是我的任务,称为时间和空间要求。

http://prnt.sc/aasnn4

注意:我正在与之合作的导师说他没有看到用例,所以我们使用了一个(1,2,3,4,5,6)列表。

exception Empty;
exception Empty;
fun middle1(l) =
     let fun len(nil)  = 0
           | len(x::l) = 1+len(l)
         and get(n, nil)  = raise Empty
           | get(n, x::l) = if n=1 then x else get(n-1,l)
        in
           get((len(l) div 2)+1, l)
        end;
val middle1 = fn : 'a list -> 'a

middle1([1,2,3,4,5,6]);
val it = 4 : int

到目前为止,我们拥有的是:

一个。 2次调用len功能和2次激活记录

湾4次调用get功能和4次激活记录

℃。我们相信它更有效率。只能使用一个激活记录,因为它可以重复使用,并且可以使用赋值来更改每个调用的函数参数值。

基本上,我们是朝着正确的方向前进吗?

非常感谢任何帮助。

0 个答案:

没有答案