programowanie dynamiczne) w skierowany graf acykliczny (DAG), co umożliwia optymalizację.

Przykład thumb|300px|Drzewo wywołań dla obliczania F(6) Jako przykład rozważmy drzewo wywołań dla funkcji obliczającej wartość n-tego wyrazu ciągu Fibonacciego:

fun F (n :int) :int = if n=1 or n=2 then 1 else F (n-1) + F (n-2)

Diagram po prawej stronie prezentuje drzewo wywołań dla wyrażenia Dla uproszczenia pominięto tu wartości wyrażeń pośrednich, pokazując jedynie wywołania funkcji. Łatwo zauważyć, że drzewo to zawiera wiele zbędnych obliczeń, na przykład jest obliczane pięciokrotnie a trzykrotnie, pomimo tego, że wartość funkcji dla zadanych parametrów jest zawsze taka sama.

thumb|220px|Zredukowane drzewo wywołań (skierowany graf acykliczny) dla obliczania F(6) Kolejny diagram pokazuje jak powyższe drzewo może zostać zredukowane do grafu skierowanego za pomocą technik typu programowanie dynamiczne lub memoizacja.

Kategoria:Algorytmika