仅使用加法递归计算产品

时间:2009-11-13 19:34:56

标签: haskell recursion

我不知道为什么以下用于递归计算产品的haskell源代码仅使用加法不起作用。

mult a b = a + mult a (b-1)

我总是遇到堆栈溢出错误。

4 个答案:

答案 0 :(得分:11)

您必须指定终止条件,否则递归将无限运行。

mult a 0 = 0
mult a b = a + mult a (b-1)

答案 1 :(得分:4)

如果b0会怎样?

答案 2 :(得分:2)

你总是可以尝试更原始的,haskell-ish解决方案= P

 mult a b = sum $ take b $ repeat a

答案 3 :(得分:1)

任何递归函数,至少应有2个案例。

基本案例和递归案例。

为了使这个更加明确,使用案例(就像我上面提到的情况一样)语句很容易理解。

mult a b = case b of
    0 -> 0                -- the base case, multiply by 0 = 0
    _ -> a + mult a (b-1) -- recursive addition case (_ matches anything
                          -- but 0 is already covered)