Recursion 使用累加器对F中的数字求和#

Recursion 使用累加器对F中的数字求和#,recursion,functional-programming,f#,Recursion,Functional Programming,F#,我试图解决一个问题,要求我将两个数字相加,但我必须在函数中使用累加器。 这是一个数学公式: 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)

我试图解决一个问题,要求我将两个数字相加,但我必须在函数中使用累加器。 这是一个数学公式:

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。
我不确定我是否在正确的轨道上?有什么想法吗?

您在最初调用
gAcc
时交换了
m
n
参数

gAcc n m 0
应该是

gAcc m n 0
这就是为什么像
m
n
这样的短而相似的变量名不是一个好主意的原因之一

您也不需要
结果
绑定,您可能希望使用一个简单的
if
表达式而不是
match
,并将
n=0
n>0
相同,因为
m+0=m

let rec g (m, n) = 
    let rec gAcc m i a = 
        if i >= 0 then
            gAcc m (i-1) (a+i+m)
        else
            a
    gAcc m n 0

这似乎很有效。问题是什么?根据你的公式
g(1,2)
=1+1+1+2=6。