# Python for Kids

## Puzzle Number 6 (Solution)

*Posted, 14 Apr 2013*

Each number in the fibonacci series is calculated by adding the previous two numbers. So to find a particular number we need to work out all the previous numbers in the series, starting with 0 and 1.

Let's start with the definition of our function, which has a single parameter 'n':

```
def fib(n):
pass
```

There's no point in adding anything for the first two numbers in the series, so we can create an if-statement and return 0 or 1 depending on the value of the parameter:

```
###
def fib(n):###
if n == 0:
return 0
elif n == 1:
return 1
```

Finally we need to loop through and calculate each number. If we have two variables `a`

and `b`

with values 0 and 1, we can create a loop that loops to the value of parameter `n`

. Each time we loop, we add `a`

and `b`

to get the next value in the series. We then set our `a`

variable to the value of `b`

and `b`

gets the value of `c`

. Once we've completed all the loops, we return the value in `c`

.

```
###
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1###
else:
a = 0
b = 1
for x in range(1, n):
c = a + b
a = b
b = c
return c
```

Let's look at an example of how the loop works, which might help explain the logic.

If we called the function with the number 3 (this effectively means we want to calculate the 4th number in the series), the first time we loop (x would be 1), we calculate `c`

by adding 0 and 1 (which makes 1 rather obviously). The new value of `a`

then becomes 1 and `b`

becomes 1.

We loop again (x is now 2), and the value of `c`

is calculated as 2. So the new value of `a`

is 1, and the new value of `b`

is 2.

The final loop (x is now 3 which equals the value of `n`

), we calculate `c`

as 3. We still set the value of the `a`

and `b`

variables (even though we don't need these values any more), but the loop then ends and we return the value of `c`

.

We can try our code with some later numbers in the fibonacci series.

```
>>> fib(30)
832040
>>> fib(50)
12586269025
>>> fib(100)
354224848179261915075
```

One final note: this isn't the only way to calculate numbers in the fibonacci series. There's a more advanced style of writing functions called recursion - which is a way for a function to calculate part of a value, and then to call itself again to calculate the next part of the value. Here's just one example of rewriting our `fib`

function, using recursion:

```
def fib(n):
if n < 2:
return n
else:
return fib(n - 1) + fib(n - 2)
```

Using recursion can result in simpler, and sometimes, more elegant code... but it can also be more difficult to understand.