Recursion Schemes for Dynamic Programming

  • Jevgeni Kabanov
  • Varmo Vene
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 4014)


Dynamic programming is an algorithm design technique, which allows to improve efficiency by avoiding re-computation of identical subtasks. We present a new recursion combinator, dynamorphism, which captures the dynamic programming recursion pattern with memoization and identify some simple conditions when functions defined by structured general recursion can be redefined as a dynamorphism. The applicability of the new recursion combinator is demonstrated on classical dynamic programming algorithms: Fibonacci numbers, binary partitions, edit distance and longest common subsequence.


Natural Transformation Edit Distance Intermediate Structure Fibonacci Number Recursion Scheme 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Bellman, R.: Dynamic Programming. Princeton Univ. Press, Princeton (1957)zbMATHGoogle Scholar
  2. 2.
    Bird, R.S.: An introduction to the theory of lists. In: Broy, M. (ed.) Logic of Programming and Calculi of Discrete Design. NATO ASI Series F, vol. 36, pp. 3–42. Springer, Berlin (1987)Google Scholar
  3. 3.
    Bird, R., de Moor, O.: Algebra of Programming. Prentice Hall Int. Series in Computer Science, vol. 100. Prentice Hall, London (1997)zbMATHGoogle Scholar
  4. 4.
    Capretta, V., Uustalu, T., Vene, V.: Recursive coalgebras from comonads. Inform. and Comput. 204(4), 437–468 (2006)zbMATHCrossRefMathSciNetGoogle Scholar
  5. 5.
    Fokkinga, M.: Law and Order in Algorithmics. PhD thesis. Dept. of Informatics, Univ. of Twente (1992)Google Scholar
  6. 6.
    Gibbons, J.: Calculating functional programs. In: Blackhouse, R., Crole, R.L., Gibbons, J. (eds.) Algebraic and Coalgebraic Methods in the Mathematics of Program Construction. LNCS, vol. 2297, pp. 149–202. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  7. 7.
    Hagino, T.: A Categorical Programming Language. PhD thesis CST-47-87. Laboratory for Foundations of Computer Science, Dept. of Computer Science, Univ. of Edinburgh (1987)Google Scholar
  8. 8.
    Malcolm, G.: Data structures and program transformation. Sci. of Comput. Program. 14(2-3), 255–279 (1990)zbMATHCrossRefMathSciNetGoogle Scholar
  9. 9.
    Meijer, E., Fokkinga, M., Paterson, R.: Functional programming with bananas, lenses, envelopes and barbed wire. In: Hughes, J. (ed.) FPCA 1991. LNCS, vol. 523, pp. 124–144. Springer, Heidelberg (1991)Google Scholar
  10. 10.
    Uustalu, T., Vene, V.: Primitive (co)recursion and course-of-value (co)iteration, categorically. Informatica 10(1), 5–26 (1999)zbMATHMathSciNetGoogle Scholar
  11. 11.
    Uustalu, T., Vene, V., Pardo, A.: Recursion schemes from comonads. Nordic J. of Computing 8(3), 366–390 (2001)zbMATHMathSciNetGoogle Scholar
  12. 12.
    Vene, V.: Categorical Programming with Inductive and Coinductive Types. PhD thesis. vol. 23 of Diss. Math. Univ. Tartuensis. Dept. of Computer Science, Univ. of Tartu (2000)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Jevgeni Kabanov
    • 1
  • Varmo Vene
    • 1
  1. 1.Dept. of Computer ScienceUniversity of TartuTartuEstonia

Personalised recommendations