我不知道为什么以下用于递归计算产品的haskell源代码仅使用加法不起作用。
mult a b = a + mult a (b-1)
我总是遇到堆栈溢出错误。
答案 0 :(得分:11)
您必须指定终止条件,否则递归将无限运行。
mult a 0 = 0
mult a b = a + mult a (b-1)
答案 1 :(得分:4)
如果b
为0
会怎样?
答案 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)