fact :: Int -> Int
fact n
|n < 0 = 0
|n == 0 = 1
|n > 0 && n `mod` 2 == 1 = fact (n-1) * n
|n > 0 && n `mod` 2 == 0 = n-1
Когда я вводим нечетное число, например: факт 5 даст 15, так как это должно 1 * 3 * 5 = 15. Однако я понял, что если я делаю факт 7 или любое другое нечетное число, оно только умножает первые два нечетных числа. Как заставить функцию умножить все нечетные числа, а не только первые 2. Например. факт 7 = 35 (т. е. 3 * 5). Также обратите внимание, что если введено четное число, он будет обрабатывать факториал всех нечетных чисел до и не включать четное число.Haskell - Попытка создать функцию для поиска факториала нечетных чисел
Я думаю, что для нечетных чисел больше, чем один он на самом деле 'факта (п-1) * п, где факт х = х-1 ', который является' факта (п-1) * n где fact (n-1) = (n-1) -1', который является '((n-1) -1) * n', который является' n * (n-2) '. – Cirdec
Все числа, которые я пробовал, равны 0, имеет ли он что-то общее с n-2? В моем коде, когда я пытался n-2, у меня не было n <0 = 0, и ответ попал в негативы. –
@Cirdec Совершенно верно, обновлено – jozefg