我正在尝试解决一个问题,该问题要求我对2个数字求和,但必须在函数中使用累加器。 这是数学公式:
sum(m, n) = m + (m + 1) + (m + 2) + · · · + (m + (n − 1)) + (m + n)
这是我到目前为止所拥有的:
let rec g (m, n) =
let rec gAcc m n a =
match n with
| 0 -> a + m
| n -> gAcc m (n-1) (a+n+m)
let result = gAcc n m 0
result // returned by g
一个例子是
g(1,2)
应该返回5。
我不确定我是否在正确的轨道上?有什么想法吗?
答案 0 :(得分:3)
最初调用m
时,已经交换了n
和gAcc
参数。
gAcc n m 0
应该是
gAcc m n 0
这就是为什么短而类似的变量名(例如m
和n
)不是一个好主意的原因。
您也不需要result
绑定,您可能想使用一个简单的if
表达式而不是match
,并将n = 0
与{{ 1}}自n > 0
:
m + 0 = m