English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как создавать рекурсивные функции. Функция, которая вызывает себя.
которая вызывает себяФункцияФункция, которая называет себя. И это technique называется рекурсией. При создании рекурсивной функции необходимо создать условия, чтобы функция не вызывалась бесконечно.
func recurse() { //statements recurse() } recurse()
Ниже показан способ выполнения рекурсивных вызовов.
В вышеупомянутой диаграмме процесса рекурсия выполняется бесконечно. В некоторых случаях может потребоваться создать рекурсию, которая будет выполняться до тех пор, пока не будут выполнены某些 условия.
Чтобы предотвратить бесконечную рекурсию, используйте рекурсивные вызовы в условиях Swift, напримерif ... else statement。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Countdown:") countDownToZero(num:3)
Когда вы запустите следующий программа, вывод будет:
Countdown: 3 2 1 0
В вышеупомянутом программном коде строка print("Countdown:") выводится в консоли.Countdown:。Эта строка вызывает функцию countDownToZero(num:3) с параметром типа Integer.
Функция countDownToZero() выполняет инструкции внутри функции, если satisfies condition 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 | Нет (Конец) |
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)")
Когда вы запустите следующий программа, вывод будет:
The factorial of 4 is 24
Шаги | Переданные параметры | Возврат предложения | Значение |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * factorial(of:3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * factorial(of:2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * factorial(of:1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Обычно рекурсия используется в качестве замены итерации, когда решение проблемы можно найти за около двух шагов.