如何用递归计算双阶乘(乘以赔率)?[作业]
How to calculate double factorial (multiply odds) with recursion?[homework]
我应该如何更改阶乘递归,以仅计算阶乘的奇数或双精度元素?例如,如果:
multiplyOdds(4)
结果应该return 1*3*5*7 =105
我知道递归是如何工作的,我只需要一点帮助我应该使用哪种方法。
您的函数 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))
我应该如何更改阶乘递归,以仅计算阶乘的奇数或双精度元素?例如,如果:
multiplyOdds(4)
结果应该return 1*3*5*7 =105
我知道递归是如何工作的,我只需要一点帮助我应该使用哪种方法。
您的函数 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))