*Published on Tuesday, 8 November 2022*

Tags: recursion2 iteration2 algorithm3 python7

## From recursive to iterative functions (step by step)

Recursive and iterative algorithms are two ways of solving problems. A recursive algorithm calls itself repeatedly until it reaches a base case, while the iterative one uses a loop to repeat operations until a condition is met. Both can achieve the same results but have different advantages and disadvantages. In this article, we will see how to turn a recursive into an iterative function step-by-step.

## Table of Content

## Step #0: Write your recursive function

```
def factorial(n):
if n==1 or n==0:
return 1
return n*factorial(n-1)
```

## Step #1: Wrap the function’s body into a while loop

```
def factorial(n):
while True:
if n==1 or n==0:
return 1
return n*factorial(n-1)
```

## Step #2: Initialize the result variable before the loop

```
def factorial(n):
result = 1
while True:
if n==1 or n==0:
return 1
return n*factorial(n-1)
```

## Step #3: Turn the special cases "return" into break or continue statements

```
def factorial(n):
result = 1
while True:
if n==1 or n==0:
break
return n*factorial(n-1)
```

## Step #4: Replace the function name with result variable

```
def factorial(n):
result = 1
while True:
if n==1 or n==0:
break
return n*result(n-1)
```

## Step #5: Turn the final “return” into an update statement

```
def factorial(n):
result = 1
while True:
if n==1 or n==0:
break
result, n = n*result, n-1
```

## Step #6: Return the result variable

```
def factorial(n):
result = 1
while True:
if n==1 or n==0:
break
result, n = n*result, n-1
return result
```

## Step #7 (Optional): Refactor your code.

```
def factorial(n):
result = 1
while n!=1 and n!=0:
result, n = n*result, n-1
return result
```

or

```
def factorial(n):
for i in range(n-1,0,-1):
n *= i
return n if n!=0 else 1
```

## What about more complex algorithms?

Unfortunately, it's not always that simple. There are cases in which we need to perform several operations on differently modified versions of the input parameters. Still, obtaining the iterative algorithm is possible by following these principles:

- Initialize a queue (list) of tuple, where each tuple contain the starting input paramenters.
- Iterate over and "consume" this queue using a
*while*loop, until it's empty. - Determine stop/continue and result's update conditions within the loop.
- Append new tuples if stop/continue conditions are not met.

Read this post if you want a concrete example about that.