Tivadar Danka Profile picture
I make math accessible for everyone. Mathematician with an INTJ personality. Chaotic good. Writing https://t.co/jYkO4bz6lL

Dec 6, 2021, 13 tweets

What is recursion?

A concise guide from zero to one. 100% knowledge, 0% fluff. 🠓

1/13

Functions, the central objects of mathematics and computer science, are just mappings of inputs to outputs.

A convenient (albeit quite imprecise) way to define them is to describe their effect. An explicit formula is often available, which we can translate to code.

2/13

However, giving an explicit formula is not always easy or possible.

For instance, can you calculate the number of ways we can order a deck of n cards by shuffling its cards?

3/13

There is a solution besides giving a formula.

Suppose that we shuffled n-1 cards. Given a new one, we can insert it into the deck at n possible locations.

Thus, all the possible shuffles of n can be obtained by shuffling n-1 cards first, then inserting the remaining one.

4/13

Counting this way gives rise to a formula that references itself. This is called recursion.

For the computation to end, we have to supply a so-called boundary condition. In our case, this is simple: a "deck" consisting of 1 card can be shuffled only one way.

5/13

Every recursion has two crucial components: the recursive step and the boundary condition.

6/13

In practice, we can simply implement recursive functions by calling the function in its definition. Most programming languages support this.

Frequently, recursion is an extremely convenient way to write clear and concise functions.

7/13

However, recursion is a double-edged sword.

Let's talk about a case where the recursive step involves referencing the function multiple times.

The famous Fibonacci numbers provide an example of this.

8/13

Just like previously, we can easily supply a recursive function to compute the n-th Fibonacci number.

Can you think of any potential issues?

9/13

For each call, the function calls itself two times. Those make an additional two calls individually, and so on.

This is how the recursive calls look for n = 4. (Each arrow represents a function call.)

10/13

As you probably figured, this can blow up really fast.

Essentially, computing F(n) this way involves an exponential number of calls to F.

11/13

Just out of curiosity, I have measured the time it takes to compute a few Fibonacci numbers with the recursive function.

F(40) took more than 30 seconds on my computer. I had no patience to wait out F(50).

So, recursion can be really slow.

12/13

TL;DR: a recursive function is one that references itself in its definition. They are powerful, but can be really slow.

Can you think of a better way to implement the computation of the Fibonacci numbers? Share your ideas below! (I can think of at least three.)

13/13

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling