継承とメモ化と再帰関数
以前、任意の再帰関数をメモ化するためにもにょもにょする話があったが、アレはrecursiveがうまくいかなくて気持ち悪いことになった。
で、最近他人様のblogをちらほらと読んでいたのだが、id:mmatsuokaさんのところに継承を使った何とも怪しいプログラムを発見。
http://d.hatena.ne.jp/mmatsuoka/20051227#1135613159
むはー。基底であるFibクラスのメンバ関数fib内における再帰的な呼び出しで、うまいこと子クラスであるFastFibのfibを呼ばせたい。そこに仮想関数を使って、無理矢理子クラスのfibを呼ばせるわけだ。なるほど。遠い昔の記憶に、OCamlインタプリタかSchemeインタプリタでlet recを実装するときにはmutableかなんか(でしたっけ?)使わないとできないよって話があったを使ったのを思い出す。
というわけで、C++で実装しまする。