滞留在rangeProduct函数中的递归中

时间:2014-10-28 15:49:47

标签: haskell recursion

我是Haskell的初学者,我被困在一个简单的递归函数中。

我正在尝试定义一个函数rangeProduct,当给定自然数m和n时返回产品

M *(M + 1) ... 的第(n-1)* N

当n小于m时,该函数应返回0。

我尝试了什么:

rangeProduct :: Int -> Int -> Int
rangeProduct m n
    | m > n     = 0
    | otherwise = m * n * rangeProduct (m+1)(n-1)

但是这是错误的,因为在其他防护中,当m变大且n变小时,在某个时刻m将变得大于n并且它将变为0导致它迄今为止所做的全部乘以零,从而得到每当我运行该函数时,在0中。

我知道答案很简单,但我被困住了。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:2)

为什么要同时打扰递增和递减?走向一个方向:

rangeProduct m n
    | m >  n    = 0
    | m == n    = n
    | otherwise = m * rangeProduct (m + 1) n

虽然你可以很容易地定义它而不用递归

rangeProduct :: Integer -> Integer -> Integer
rangeProduct m n
    | m > n     = 0
    | otherwise = product [m..n]