Chapter 1. Small problems

 

To get started, we will explore some simple problems that can be solved with no more than a few relatively short functions. Although these problems are small, they will still allow us to explore some interesting problem-solving techniques. Think of them as a good warmup.

1.1. The Fibonacci sequence

The Fibonacci sequence is a series of numbers such that any number, except for the first and second, is the sum of the previous two:

0, 1, 1, 2, 3, 5, 8, 13, 21...

The value of the first Fibonacci number in the series is 0. The value of the fourth Fibonacci number is 2. It follows that to get the value of any Fibonacci number, n, in the series, one can use the formula

fib(n) = fib(n - 1) + fib(n - 2)

1.1.1. A first recursive attempt

The preceding formula for computing a number in the Fibonacci sequence (illustrated in figure 1.1), a form of pseudocode, can be trivially translated into a recursive Swift function (a recursive function is a function that calls itself). This mechanical translation will serve as the first version of our attempt at writing a function to return a given value of the Fibonacci sequence:

func fib1(n: UInt) -> UInt {
    return fib1(n: n - 1) + fib1(n: n - 2)
}
Figure 1.1. The height of each stickman is the addition of the previous two stickmen’s heights added together.
Note

fib1() uses UInt instead of Int because the Fibonacci sequence does not exist in the realm of negative integers.

1.2. Trivial compression

1.3. Unbreakable encryption

1.4. Calculating pi

1.5. The Towers of Hanoi

1.6. Real-world applications

1.7. Exercises