function - Haskell - 尝试创建一个函数来查找奇数的阶乘

标签 function haskell recursion factorial

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)。另请注意,如果输入偶数,它将计算出所有奇数的阶乘,直到不包括偶数。

最佳答案

这让我想起了著名的Evolution of a Haskell Programmer 。解释一下终身教授的答案:

factorialOfOdds :: Integer -> Integer
factorialOfOdds n = product [1,3..n]

关于function - Haskell - 尝试创建一个函数来查找奇数的阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20082167/

相关文章:

java - 在 Java 中使用 for 循环打印特定模式

javascript - block 作用域函数 ECMAScript 6 奇怪的行为

haskell - 如何在 Nix 中禁用对 Haskell 包的测试?

python - 为什么这种递归回溯函数比非递归函数慢,用于计算 python 中找零硬币的最小数量?

javascript - 如何使用 jquery $(this) 提供 js 函数

javascript "or"语句

haskell - 使用以下函数查找元组中的第 n 个元素

haskell - 使用haskell的单例,如何编写 `fromList::[a] -> Vec a n` ?

c++ - 使用递归函数时出现段错误

javascript - Mongodb递归搜索