# Lecture 12

## Recursion

MCS 275 Spring 2022
David Dumas

### Lecture 12: Recursion

Course bulletins:

• Homework 4 due Tuesday at Noon CST
• Anonymous feedback survey coming this week
• Project 1 grading underway, ETA Thursday

## Recursion

In computer science, recursion refers to a method of solving a problem that depends on solving smaller versions of the same problem.

Usually, recursion involves a function calling itself.

## Strategies using recursion

• Divide and conquer: A problem can be split into pieces; solutions for the pieces can be combined to the full solution.
• e.g. Mergesort
• Decrease and conquer: Reduce a problem for a given input (e.g. n) to the answer for a slightly smaller input (e.g. n-1) and a bit of extra work.
• e.g. Factorial

## Iteration

Recursive solutions are often contrasted with iterative solutions.

• Iterative: Loops and local variables keep track of all state (work to be done, work completed, next ...)
• Recursive: Arguments keep track of current state; call stack stores work in progress; return values send back results.

Recursive solutions can always be converted to iterative ones, often at the cost of more complex code.

## Stop condition

A function that always calls itself will never finish!

Recursion must include some kind of stop condition—a case in which the function can directly return an answer instead of calling itself.

## Today's examples

• Factorial
• Fibonacci numbers
• Paper folding sequence

## Factorial

The classic first example of recursion, computing $$n! = n \times (n-1) \times \cdots \times 2 \times 1.$$

The argument to the function decreases with each subsequent call, so it eventually reaches the stop condition ($n \leq 1$).

## Fibonacci

The Fibonacci numbers are defined by $$F_0=0,\; F_1=1,\; \text{and }F_n = F_{n-1} + F_{n-2}$$

So the sequence begins $0,1,1,2,3,5,8,13,...$

The definition immediately suggests a recursive implementation.

## Paper folding sequence

Let's use $\oplus$ to mean concatenation of binary sequences, so $0110 \oplus 11 = 011011$.

If $A$ is a binary sequence, let $\bar{A}$ denote the sequence with $0$ and $1$ switched, e.g. $\overline{11101} = 00010$

Finally, let $A^r$ denote the sequence in opposite order, e.g. $10010^r = 01001$.

$$PFS(n) = PFS(n-1) \oplus 1 \oplus \overline{PFS(n-1)^r}$$

### Revision history

• 2022-02-07 Initial publication