# Swift Recursion

A function that calls itself repeatedly is known as recursive function and this technique is called recursion. When you create a recursive function, you must create a condition so that the function does not call itself indefinitely.

### Example:

You can see in the above diagram that recursion is executed indefinitely. To get rid of these type of indefinite recursive, we use control statements.

### Example: Swift 4 Program to print N positive numbers

Output:

```Countdown:
6
5
4
3
2
1
0
```

You can see in the above program that the statement print("Countdown:") gives the output and the statement countDownToZero(num:3) calls the function that takes a parameter Integer.

The statement inside the function countDownToZero() executes and if the condition num > 0 is fulfilled, the function countDownToZero() is called again as countDownToZero(num: num - 1).

When the condition is not fulfilled, the function call is not done and the recursion stops.

### Execution Steps

Steps Function call Printed Is num > 0 ?
1 countDownToZero(6) 6 Yes
2 countDownToZero(5) 5 Yes
3 countDownToZero(4) 4 Yes
4 countDownToZero(3) 3 Yes
5 countDownToZero(2) 2 Yes
6 countDownToZero(1) 1 Yes
7 countDownToZero(0) 0 No (Recursion Ends)

### Example2: Swift 4 program to find factorial of a number

Output:

```The factorial of 6 is 720
```

### Execution Steps

Steps Argument passed Return statement Value
1 6 return 6 * findFactorial(of:5) 6 * findFactorial(of:5)
2 5 return 5 * findFactorial(of:4) 6 *5 findFactorial(of:4)
3 4 return 4 * findFactorial(of:3) 6 *5*4 findFactorial(of:3)
4 3 return 3 * findFactorial(of:2) 6 *5*4*3 findFactorial(of:2)
5 2 return 2 * findFactorial(of:1) 6*5*4*3*2 findFactorial(of:1)
6 1 return 1 6*5*4*3*2*1