r(i,j)
によって定義される再帰的に定義された関数値を計算したい
r i j | i<0 || j<0 = 0
| i==0 && j==0 = 1
| otherwise = (i-1) * r (i-2) j + r (i-1) (j-1)
明らかに、NxN
これらの係数の表は で計算できますO(N^2)
。残念ながら、次のような単純な評価
[[r i j | j <-[0..50]]| i <- [0..50]]
とてつもなく効果のない方法 (指数関数的な複雑さ) で実行されます。どうやら、Haskell はそれぞれの再帰ツリー全体を構築し、r i j
以前に計算された値などを無視しますr (i-1) (j-1)
。
そのようなテーブルを計算するエレガントで効果的な方法は何ですか?