English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift основы教程

Операторы Swift

Swift управление потоком

Swift коллекции

Swift функции

Swift 高级

Рекурсия в Swift

В этой статье вы узнаете, как создавать рекурсивные функции. Функция, которая вызывает себя.

которая вызывает себяФункцияФункция, которая называет себя. И это technique называется рекурсией. При создании рекурсивной функции необходимо создать условия, чтобы функция не вызывалась бесконечно.

Как работает рекурсия в Swift?

func recurse() {
    //statements
    recurse()
}
recurse()

Ниже показан способ выполнения рекурсивных вызовов.

В вышеупомянутой диаграмме процесса рекурсия выполняется бесконечно. В некоторых случаях может потребоваться создать рекурсию, которая будет выполняться до тех пор, пока не будут выполнены某些 условия.

Чтобы предотвратить бесконечную рекурсию, используйте рекурсивные вызовы в условиях Swift, напримерif ... else statement

Пример 1: Печать N положительных чисел

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 ?
1countDownToZero(3)3Да
2countDownToZero(2)2Да
3countDownToZero(1)1Да
4countDownToZero(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)")

Когда вы запустите следующий программа, вывод будет:

The factorial of 4 is 24

Как работает этот пример?

Давайте рассмотрим шаг за шагом

Выполнение шагов
ШагиПереданные параметрыВозврат предложенияЗначение
14return 4 * factorial(of:3)4 * factorial(of:3)
23return 3 * factorial(of:2)4 * 3 * factorial(of:2)
32return 2 * factorial(of:1)4 * 3 * 2 * factorial(of:1)
41return 14 * 3 * 2 * 1

Обычно рекурсия используется в качестве замены итерации, когда решение проблемы можно найти за около двух шагов.