Learn

Now that we’ve built a mental model for how recursion is handled by Python, let’s implement the same function and make it truly recursive.

To recap: We want a function that takes an integer as an input and returns the sum of all numbers from the input down to 1.

``````sum_to_one(4)
# 4 + 3 + 2 + 1
# 10``````

Here’s how this function would look if we were to write it iteratively:

``````def sum_to_one(n):
result = 0
for num in range(n, 0, -1):
result += num
return result

sum_to_one(4)
# num is set to 4, 3, 2, and 1
# 10``````

We can think of each recursive call as an iteration of the loop above. In other words, we want a recursive function that will produce the following function calls:

``````recursive_sum_to_one(4)
recursive_sum_to_one(3)
recursive_sum_to_one(2)
recursive_sum_to_one(1)``````

Every recursive function needs a base case when the function does not recurse, and a recursive step, when the recursing function moves towards the base case.

Base case:

• The integer given as input is 1.

Recursive step:

• The recursive function call is passed an argument 1 less than the last function call.

### Instructions

1.

Define the `sum_to_one()` function.

It takes `n` as the sole parameter.

We’ll start by setting up our base case.

This function should NOT recurse if the given input, `n` is `1`.

In the base case, we return `n`.

2.

Now, we’ll consider the recursive step.

We want our return value to be the current input added to the return value of `sum_to_one()`.

We also need to invoke `sum_to_one()` with an argument that will get us closer to the base case.

``# return {recursive call} + {current input}``
3.

Each recursive call is responsible for adding one of those integers to the ultimate total.

To help us visualize the different function calls, add a print statement before the recursive call that tells us the current value of `n`.

Use the following string for the print statement: `print("Recursing with input: {0}".format(n))`

Let’s test out our function. Call `sum_to_one()` with 7 as input and print out the result. Nice work!