Recursive Definitions (Application in Generic Programming) Dr. Partha Pratim Das, Kaushik Biswas*, Kausik Datta
Order of topics Observing for recurrences in nature Expressing recursive way Recursive definition Recursive set and set operations Recursive structures Recursive functions Recursive algorithms Conversion process to C++ Template Exercises
Recursive pattern seen in nature
variables : X F constants : + start : X rules : (X F-[[X]+X]+F[+FX]-X), (F FF) Angle : 25° Description in L-system Algorithmic Beauty of Plants
Recursive Definition To compress a large set of objects in reduced form of basis clause, recursive clause and extremal clause such that it could be recreated/re- generated. Basis Clause : Assumptions/Constants/Terminals Recursive/Inductive clause: Rules of productions Extremal clause : Making rules exclusive Most cases, basis clause and recursive clause are sufficient.
Basis clause: Some objects are in Set Recursive clause: Rules how to combine elements of set to produce new elements Extremal Clause: Excludes objects from set which are not defined by basic clause and recursive clause Set of even integers a) Basis: 0 S b) Recursive : x S (x+2) S (x-2) S c) Extremal: If x can not be obtained by a and b, its not in S Recursive Definition of Set
Define a set having integers which are divisible by both 2 and 3. Basis clause: Recursive clause: Extremal clause: Define a set having integers which are divisible by either 2 or 3. Basis clause: Recursive clause: Extremal clause: Recursive Set Question
Generic Union Definition ( n i=1 A i ) : Basis Clause: For n = 1, n i=1 A i = A 1. Inductive Clause: n i=1 A i = ( n i=1 A i ) A n+1 Generic Intersection Definition ( n i=1 A i ) : Basis Clause: For n = 1, n i=1 A i = A 1. Inductive Clause: n i=1 A i = ( n i=1 A i ) A n+1 Recursive Definition of set-operation
Structure definition : H- x(n) - H Basis: x(n)= HCH if n=1 Recursive rules: x(n) = x(n-1)-HCH if n > 1 Recursive Structures
List Structure Definition List Basis : List = Recursive Rule: List = (T, List ) List Function Definition head : List -> T Basis : head ( ) = ?? Recursive rule: head (List ) = domain( T, List ) tail : List -> List Basis : tail( ) = Recursive rule: tail (List ) =range(T, List ) Recursive List Definition
Binary Tree Definition Tree Basis : Tree = Recursive Rule: Tree = (T, (Tree, Tree )) Quiz: Define following function recursively current: Tree -> T left: Tree -> Tree right: Tree ->Tree Recursive Binary Tree Definition
Higher order recursion R. Structures D, R R. decompose : D -> 2 D, R. compose : 2 R -> R, Terminal Fn: D -> R - Watch for several recursive component in it Recursive Algorithm D D D D DDD RR R R R R R
Recursive structure:- Array A (start, end) = { A[start] } if start== end = { A[end] } X A(start, end-1) => (A[start], A[start+1], …A[end]) Decomposition function:- small (A(s, e) ) = { y : y A(s,e), y < A[s] } mid (A(s, e) ) = { y : y A(s,e), y = A[s] } large (A(s, e) ) = { y : y A(s,e), y > A[s] } Recursive Algorithm:- qsort( A(s, e) ) Basis rule: none if s== e Recursive rule: qsort( small (A(s,e) ) ) X { mid (A(s,e) ) } X qsort( large (A(s,e) ) ) if s < e -Composition are defined by X product operator on array elements Quick sort
- Conditions must be checked using (partial ) specialization - Loops must be done by recursive structure fib (n) = 1 if n=0 = 1 if n=1 = fib(n-1) + fib(n-2) otherwise //// Template form//// template struct fib { static const int val= fib ::val + fib ::val; }; template <> struct fib { static const int val=1; }; template <> struct fib { static const int val=1; }; Conversion Process to Template form
A(m,n) = n+1 if m = 0 = A(m-1, 1) if m>0 and n=0 = A(m-1, A(m, n-1)) if m>0 and n>0 (Require partial specialization) template struct A { static const int val = A ::val>::val; }; template struct A { static const it val = A ::val; }; template struct A { static const it val = n+1; }; Converting Ackermann Function
Workshop Exercises 1) Write vector as recursive definition 2) Write value () recursive function to get value of vector. 3) Write vector dot-product algorithm recursively 4) Write matrix as recursive definition [ Hint: Could use vector defined above] 5) Write value () recursive function to get value of matrix. 6) Write product of two matrices using recursive algorithm 7) Convert all the above recursive structure, recursive function and recursive algorithm using C++ template based generic code
References [1994] A Gentle Introduction to Category Theory - the calculational approach by Maarten M. Fokkinga [1999] Category Theory Lecture Notes for ESSLLI by Michael Barr and Charles Wells [2001] Category Theory Lecture Notes by Daniele Turi
References [2004] The Algorithmic Beauty of Plants by Przemyslaw Prusinkiewicz & Aristid Lindenmayer: Original book available as digital version now. Its eye-opening book on re-writing rule based hierarchy of any biological or natural recursive pattern. [2009] CS381 Discrete Structures/Discrete Mathematics Web Course Material: rse.html Most of computer science discrete math materials could be found here including recursive definitions for easy reference.