У цій статті ви навчитеся створювати рекурсивну функцію; функція, яка викликає себе.
Функція, яка викликає себе, відома як рекурсивна функція. І ця методика відома як рекурсія. Створюючи рекурсивну функцію, ви повинні створити умову, щоб функція не викликала себе безкінечно (нескінченно).
Як працює рекурсія в 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 |
Зазвичай рекурсія використовується як заміна ітерації, коли рішення проблеми можна знайти приблизно за два етапи. Перший крок шукає рішення, якщо не повторити процес.