1
私はocamlで次の擬似コードを書いているとします。ocamlは再帰関数をメモします
foo(n:int, d:int) = foo(n-1,d-1) + foo(n-1,d)
//Assume proper terminating conditions are added here
つまり、再帰的に定義された関数を計算しています。
上記はテール再帰的ではありません。 (n-1、d-1)foo(n-1、d-1)の計算によってfoo(n-1、d-1)が再び呼び出されるように、
のような多くの冗長な作業が行われます。私はこれを動的プログラミング問題として手作業で書くことができることを知っています。私はここに興味がありません
私がこのように書くと、ocamlはノードをメモして再計算されないようにします。または私が夢見ることができない他の空想的なもの?
また、汎用的な 'memo_rec'を記述して、再帰関数をメモ書きする方法について、段階的に説明しています。https://realworldocaml.org/v1/en/html/imperative-programming-1.html#メモ化と動的プログラミング – Stas