Functional programming 在SML中创建迭代函数
我已经在这个问题上纠缠了一段时间,想不出如何解决它 考虑以下函数f:N→ N f(0)=2,f(1)=0,f(2)=3 f(n)=3f(n-3)+2f(n-2)-f(n-1)表示n≥3. 定义f的迭代版本 我知道我的解决方案应该是这样的Functional programming 在SML中创建迭代函数,functional-programming,sml,smlnj,Functional Programming,Sml,Smlnj,我已经在这个问题上纠缠了一段时间,想不出如何解决它 考虑以下函数f:N→ N f(0)=2,f(1)=0,f(2)=3 f(n)=3f(n-3)+2f(n-2)-f(n-1)表示n≥3. 定义f的迭代版本 我知道我的解决方案应该是这样的 fun myFun 0 = 2 | myFun 1 = 0 | myFun 2 = 3 | myFun n = let (* code *) in funHelp(3,2,0,n)
fun myFun 0 = 2
| myFun 1 = 0
| myFun 2 = 3
| myFun n =
let
(* code *)
in
funHelp(3,2,0,n)
end ;
我知道迭代函数假设只使用一个递归调用,而让参数完成所有工作。不过,我不知道如何解决这个问题!任何帮助都将不胜感激
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
这应该是你想要的,如果有点混乱的话。我想这是家庭作业,所以我给你一个部分解决方案:
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
填写表格???不应该太难。这不是一个迭代解决方案——它必须是尾部递归的。