如何在SML中递归分割数字?
fun halves (n : int) : int * int =
let val x = 0
val y = x+1
in
case n of
x => (n,x)
|y => (n,y)
|_ => halves(n-1)
end
答案 0 :(得分:2)
这是作业问题吗?
你发布的代码没有多大意义,因为这三种情况都是多余的:模式“x”匹配所有内容,“y”也是如此,“_”也是如此。如果要检查0,只需在模式中写入0即可。在您的代码中,x始终具有值0,y始终具有值1.
这是一个提示:如果你有两个相互调用的函数(相互递归)怎么办?你可以定义那些有趣的......以及:
fun f (a, b) = g (b, a)
and g (a, b) = f (a + b, a - b)
(这当然只是永远循环)。
答案 1 :(得分:0)
你应该仔细考虑你的基础和递归步骤。
基础很简单:halves 0 = (0,0)
对于递归步骤 - 问问自己如何使用halves 11 = (5,6)
计算halves 12
的事实?同样,您如何使用halves 12 = (6,6)
计算halves 13
的事实?一般来说,如果你让(a,b)
为halves (n-1)
,就a
和b
而言halves n
是什么?