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。