我应该如何改变阶乘递归,只计算阶乘的奇数或双精度?例如:
Double
结果应返回1 * 3 * 5 * 7 = 105
我知道递归是如何工作的,我只需要一些帮助,我应该使用哪种方法。
答案 0 :(得分:0)
您的函数multiplyOdds(n)
是否需要乘以第一个n
个奇数?鉴于第n个奇数等于2 * n - 1
,您可以轻松地编写一个递归解决方案,如下面的Haskell:
multiplyOdds :: Int -> Int
multiplyOdds n = multiplyOddsTail n 1
multiplyOddsTail :: Int -> Int -> Int
multiplyOddsTail n acc = case n of
1 -> acc
n -> multiplyOddsTail (n - 1) (acc * (n * 2 - 1))