在SML中创建迭代函数

时间:2013-10-16 04:31:15

标签: functional-programming sml smlnj

我一直坚持这个问题一段时间了,想不出怎么解决它。

  

考虑以下函数f:N→N。

     

f(0)= 2,f(1)= 0,f(2)= 3,

     对于n≥3,

f(n)= 3f(n-3)+ 2f(n-2)-f(n-1)。

     

定义f的迭代版本。

我知道我的解决方案看起来应该是这样的

fun myFun 0 = 2
|   myFun 1 = 0
|   myFun 2 = 3
|   myFun n = 
       let
        (* code *)
       in
         funHelp(3,2,0,n)
       end ;

我知道迭代函数只是假设使用一个递归调用,而让参数完成所有工作。不过,我无法弄清楚如何解决这个问题!任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

我认为这是作业,所以我只给你一个部分解决方案:

fun f n =
    let
      fun iter(0, n0, n1, n2) = n0
        | iter(1, n0, n1, n2) = n1
        | iter(2, n0, n1, n2) = n2
        | iter(n, n0, n1, n2) = iter(n - 1, n1, n2, ???)
    in
      iter(n, 2, 0, 3)
    end

填写???不应该太难。

答案 1 :(得分:0)

fun funHelp 0 = (2,0,3)
  | funHelp n = let val (x,y,z) = funHelp n - 1
                in
                  (y,z,(3 * x) + (2 * y) - z)
                end

fun myFun n = let val (x,_,_) = funHelp n
              in
                x
              end

这应该做你想要的,如果有点混乱。

相关问题