У цій статті ви навчитеся створювати рекурсивну функцію; функція, яка викликає себе.
Функція, яка викликає себе, відома як рекурсивна функція. І ця методика відома як рекурсія. Створюючи рекурсивну функцію, ви повинні створити умову, щоб функція не викликала себе безкінечно (нескінченно).
Як працює рекурсія в Swift?
func repeatse () (// оператори repeatse ()) repeatse ()
На малюнку нижче показано, як працює рекурсія, викликаючи себе знову і знову.

На наведеній вище блок-схемі рекурсія виконується нескінченно. Однак майже у всіх випадках ви створюєте рекурсію, яка виконується доти, доки не буде дотримано якусь умову.
Щоб запобігти нескінченній рекурсії, використовуйте рекурсивний виклик всередині умовних операторів Swift, наприклад if … else.
Приклад 1: Вивести N додатних чисел
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Коли ви запускаєте таку програму, результат буде:
Зворотний відлік: 3 2 1 0
У наведеній вище програмі оператор print("Countdown:")виводить зворотний відлік: у консолі. І оператор countDownToZero(num:3)викликає функцію, яка приймає параметр Integer.
Оператор всередині функції countDownToZero()виконується, і якщо умова num> 0виконана, функція countDownToZero()знову викликається як countDownToZero(num: num - 1).
Якщо умова не виконується, виклик функції не виконується, а рекурсія зупиняється.
Давайте подивимось це кроками
Етапи виконання| Кроки | Виклик функції | Друкується | num> 0? |
|---|---|---|---|
| 1 | countDownToZero(3) | 3 | Так |
| 2 | countDownToZero(2) | 2 | Так |
| 3 | countDownToZero(1) | 1 | Так |
| 4 | countDownToZero(0) | 0 | Ні (Закінчується) |
Приклад 2: Знайдіть факторіал числа
func factorial(of num: Int) -> Int ( if num == 1 ( return 1 ) else ( return num * factorial(of:num - 1) ) ) let x = 4 let result = factorial(of: x) print("The factorial of (x) is (result)")
Коли ви запускаєте таку програму, результат буде:
Факториал 4 дорівнює 24
Як працює цей приклад?

Давайте подивимось це кроками
Етапи виконання| Кроки | Аргумент передано | Повернення заяви | Значення |
|---|---|---|---|
| 1 | 4 | return 4 * factorial(of:3) | 4 * факторіал (з: 3) |
| 2 | 3 | return 3 * factorial(of:2) | 4 * 3 * факторіал (з: 2) |
| 3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * факторіал (з: 1) |
| 4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Зазвичай рекурсія використовується як заміна ітерації, коли рішення проблеми можна знайти приблизно за два етапи. Перший крок шукає рішення, якщо не повторити процес.








