如何通过记忆计算二项式系数?

时间:2018-01-25 23:01:36

标签: haskell functional-programming memoization

递归形式是这样的:

co:: (Int,Int) -> Int
co| k == 0 || k == n = 1
  | 0 < k, k < n = co(n-1,k-1) + co(n-1,k)
  | otherwise = 0

我如何记忆,所以我不必经常进行相同的计算?

1 个答案:

答案 0 :(得分:1)

如果你感觉很健康并希望有人理解你的程序,那么如何实现二项式系数:

--| computes the binomial coefficient n choose k = n!/k!(n-k)!
binom n k = product [max (k+1) (n-k+1) .. n] `div` product [1 .. min k (n-k)]

这是一种记忆两个参数函数的简单方法,如下所示:

binom n k = (vals !! n) !! k where
  vals = 1 : [ 1 : [if k == n
                    then 1
                    else binom (n-1) (k-1) + binom (n-1) k
                   | k <- [1..n]]
             | n <- [1..]]