В этой статье вы научитесь создавать рекурсивную функцию; функция, которая вызывает сама себя.
Функция, которая вызывает сама себя, называется рекурсивной функцией. И этот метод известен как рекурсия. При создании рекурсивной функции вы должны создать условие, чтобы функция не вызывала себя бесконечно (бесконечно).
Как рекурсия работает в Swift?
func recurse () (// операторы recurse ()) recurse ()
На рисунке ниже показано, как работает рекурсия, вызывая себя снова и снова.
На приведенной выше блок-схеме рекурсия выполняется бесконечно. Однако почти всегда вы создаете рекурсию, которая выполняется до тех пор, пока не будет выполнено какое-либо условие.
Чтобы предотвратить бесконечную рекурсию, используйте рекурсивный вызов внутри условных операторов 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)
.
Если условие не выполняется, вызов функции не выполняется и рекурсия останавливается.
Посмотрим на это пошагово
Шаги выполненияШаги | Вызов функции | Печатный | число> 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 |
Обычно рекурсия используется как замена итерации, когда решение проблемы можно найти примерно за два шага. Первый шаг - поиск решения, если не повторить процесс.