【发布时间】:2021-12-01 14:33:33
【问题描述】:
我想在 haskell 中编写一个伯努利函数bernoulli:: Integer -> Rational,使用以下算法计算给定整数的伯努利数。
函数“frac”和“binom”用于计算定义中的二项式。这是我到目前为止所拥有的:
fact :: Integer -> Integer
fact i = foldr (*) 1 [1..i]
binom :: Integer -> Integer -> Integer
binom n k = (fact n) `div` (fact k* fact (n-k))
bernoulli :: Integer -> Rational
bernoulli 0 = 1
bernoulli i = ((binom i j) * (bernoulli j)) / (j - i - 1) where j = i-1
我现在已经尝试了几次,但要么递归不起作用,要么生成的 Rational 错误。
【问题讨论】:
-
向我们展示代码
-
您可以发布带有代码的电线关联吗?现在它读作“出了点问题”,含糊不清。
-
请注意,
binom的这种定义是非常低效的。分数中的大多数项取消。实际计算阶乘几乎从来都不是一个好主意,而是只对不取消的项进行乘积。