2

私はしばらくこの問題に悩まされていて、それを解決する方法が思いつきません。

次の関数 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 ;

反復関数は、引数にすべての作業を任せながら、1回の再帰呼び出しのみを使用することを想定しています。しかし、この問題でそれを行う方法がわかりません!どんな助けでも大歓迎です!

4

2 に答える 2

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

少し厄介な場合でも、これはあなたが望んでいるように見えるはずです。

于 2013-10-16T04:40:59.873 に答える