C | C++ | CGI |

gdb | Java | JavaScript |

Oberon | Objective-C |

Perl | Postscript | Python |

shells | SQL | Tcl/Tk | VB |

Links | Recursion | Language Tools |

**Programming** has three aspects:

- learning the language (syntax and semantics)
- learning how to create and manage data structures
- learning existing, and creating new, algorithms

The first two aspects are finite and can be learned the first time in a few months. Subsequent langauges can be learned in weeks. Although there an unbounded number of possible data structures there are only a small finite number of data structure elements that are used recursively to define any data structure, no matter how complex or large.

The third aspect, algorithms, is unbounded as is mathematics, and both mathematics and algorithms are a mutually reinforcing life time study.

**Recursion** is essential to mathematics and modern programming and the theory of computing
in general. Recursion is fundmentally elegant. Recursion is where the implementation (or
definition) of a function calls other functions, including itself either directly or indirectly.
Indirect recursion level one is where a function calls another function which in turn calls the
first function. Indirect recursion can be two levels or more.

For some algorithms recursion is the only actual or practical means of implementation, for example when manipulating tree data structures.

**Iteration** is essential to mathematics and modern programming and the theory of computing
in general. Iteration is where a block of statements are executed a number of times in a loop
where a loop variable steps over a range of values. A loop can be nested within another loop.

Iteration and recursion can be combined in any way that is needed.

2005-2009