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

Swift 再帰

この記事では、再帰関数の作成方法について学びます。自己呼び出し関数です。

自身を呼び出す関数再帰関数と呼ばれ、再帰技術と呼ばれるこの技術を作成する場合、関数が自身を無限期に呼び出さないように条件を作成する必要があります。

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)

以下のプログラムを実行すると、出力は以下のようになります:

Countdown:
3
2
1
0

上記のプログラムでは、print("Countdown:")文がコンソールに表示されますCountdown:。この文はInteger型の引数を持つ関数 countDownToZero(num:3)。

countDownToZero()は関数内の文を実行し、num > 0の条件を満たす場合、countDownToZero()は再度関数 countDownToZero(num: num)を呼び出します。 - 1)。

条件を満たしていない場合、関数呼び出しを実行せずに再帰を停止します。

具体的な手順を見てみましょう

実行ステップ
ステップ関数呼び出し印刷num > 0 ?
1countDownToZero(3)3Yes
2countDownToZero(2)2Yes
3countDownToZero(1)1Yes
4countDownToZero(0)0No (終了)

例2:数字の階乗を検索する

func factorial(of num: Int) -> Int {
    if num == 1 {
        return 1
    }
        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

このインスタンスがどのように動作するかを見てみましょう?

以下のようにステップを順に見てみましょう

実行ステップ
ステップ渡された引数return 文
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

問題の解決策が約二つのステップで見つかる場合、通常は再帰を反復の代替として使用します。