【发布时间】:2018-07-05 07:37:28
【问题描述】:
递归形式是这样的:
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
我如何记住,这样我就不必经常进行相同的计算?
【问题讨论】:
-
让我们从一个可以编译并提供正确答案的解决方案开始。您需要声明
n和k。 -
修复该问题后,我认为更有效的解决方案直接来自定义:
nCk = n!/((k!)(n-k!))。您可以使用product来计算阶乘,这样就不需要记忆了。 -
您可以将值存储在盒装数据结构中,例如地图或数组。要么更新并将每个新值插入到映射中,将更新后的映射作为程序状态传递,要么使用惰性创建一个充满 thunk 的结构,它只会在需要时计算一次值。
标签: haskell functional-programming memoization binomial-coefficients