Расчет продукта рекурсивно только с использованием сложения - PullRequest
1 голос
/ 13 ноября 2009

Я не знаю, почему следующий исходный код на haskell для рекурсивного вычисления продуктов только с использованием сложения не работает.

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

Я всегда получаю ошибку переполнения стека.

Ответы [ 4 ]

11 голосов
/ 13 ноября 2009

Вам нужно будет указать условие завершения, иначе рекурсия будет выполняться бесконечно.

mult a 0 = 0
mult a b = a + mult a (b-1)
4 голосов
/ 13 ноября 2009

Что произойдет, если b равно 0?

2 голосов
/ 14 ноября 2009

Вы всегда можете попробовать более оригинальное решение haskell-ish = P

 mult a b = sum $ take b $ repeat a
1 голос
/ 14 ноября 2009

с любой рекурсивной функцией, должно быть как минимум 2 случая.

базовый случай и рекурсивный случай.

Чтобы сделать это более явным, использование выражения case (как и в случаях, которые я упоминал выше) приятно и легко для понимания.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...