English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、再帰関数の作成方法について学びます。自己呼び出し関数です。
自身を呼び出す関数再帰関数と呼ばれ、再帰技術と呼ばれるこの技術を作成する場合、関数が自身を無限期に呼び出さないように条件を作成する必要があります。
func recurse() { //文 recurse() } recurse()
以下は再帰呼び出しの方法を示しています。
上記のフローチャートでは、再帰は無限に実行されます。ある場合、条件を満たすまで再帰を続ける再帰を作成する必要があるかもしれません。
無限再帰を防ぐために、Swiftの条件文内で再帰呼び出しを使用してください、例えばif ... else 文。
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 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Yes |
2 | countDownToZero(2) | 2 | Yes |
3 | countDownToZero(1) | 1 | Yes |
4 | countDownToZero(0) | 0 | No (終了) |
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 文 | 値 |
---|---|---|---|
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 |
問題の解決策が約二つのステップで見つかる場合、通常は再帰を反復の代替として使用します。