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

时间:2019-04-13 07:51:12

标签: recursion functional-programming f#

我正在尝试解决一个问题,该问题要求我对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。 我不确定我是否在正确的轨道上?有什么想法吗?

1 个答案:

答案 0 :(得分:3)

最初调用m时,已经交换了ngAcc参数。

gAcc n m 0

应该是

gAcc m n 0

这就是为什么短而类似的变量名(例如mn)不是一个好主意的原因。

您也不需要result绑定,您可能想使用一个简单的if表达式而不是match,并将n = 0与{{ 1}}自n > 0

m + 0 = m