# Recursion Revisited

### Recursion, from more than one point-of-view.

A common programming idiom in computer science is solving a problem by self-reference, also known as recursion. In this post, we look at two different implementations of the same problem.

#### Solve a recursive problem in two different programming language paradigms

Let’s look at the solution to a simple problem, compute $f(x)=e^{x}$.

We will illustrate two separate solutions - one in a procedural language (python), and the other in a functional language (elixir).

Let’s start off with the functional language. Were does recursion come into play?

We define the function $f(x)=e^x$ as the infinite sum, $\text{ }f(x) = \sum_{n=0}^\infty{\frac{x^n}{n!}}$

In our solution below, we define two separate recursive functions, `exp/2`

and `fac/1`

. What’s interesting to note here is how each of these functions has two separate definitions. This is an aspect of programming in elixir that elegantly uses pattern-matching to return different results depending upon the input. Our two functions nicely dovetail into the base-case and recursive case of a recursive algorithm.

For example, looking at `exp/2`

, the first function definition returns 1 for any value of x (as indicated by the `_`

preceding the variable) and returns 1. This is the mathematical equivalent of $x^0=1\text{ for any }x$.

The second definition of `exp/2`

is the recursive case. for any value of $n\gt0$. Moreover, we define `exp(x, n)`

as $\frac{e^x}{n!}$ + `exp(x, n-1)`

.

Similarly for the definition of `fac/1`

we see two definitions; one for $n=0$ and another for all values of $n\gt0$.