Swiftの再帰関数の使い方をやさしく解説!初心者でも理解できる再帰の基本と実践例
生徒
「Swiftで、自分自身を呼び出す関数があるって聞いたんですが、本当にそんなことできるんですか?」
先生
「はい、それは『再帰関数(さいきかんすう)』と呼ばれるものです。Swiftでは、自分自身を呼び出すことで繰り返し処理を行うことができます。」
生徒
「なるほど...でも、それって無限ループになりませんか?止まらないようにできるんですか?」
先生
「そこが再帰関数の大事なポイントです。終了条件(しゅうりょうじょうけん)を決めておけば、ちゃんと止まるんですよ。それでは、詳しく見ていきましょう!」
1. 再帰関数とは?
Swiftの再帰関数(さいきかんすう)とは、自分自身を呼び出す関数のことです。プログラムの中で、同じ関数がくり返し呼ばれることで、処理を繰り返します。
例えば、「1から5までの数字を順番に表示したい」ときに、for文などを使わずに、再帰関数で書くことができます。
ただし、再帰関数には必ず終了条件をつける必要があります。これがないと、永遠に関数が自分自身を呼び出し続けてしまい、エラーになります。
2. 再帰関数の基本構造
Swiftでの再帰関数の基本的な形は、以下のようになります。
func 関数名(引数) {
if 終了条件 {
return
}
// 処理内容
関数名(次の引数)
}
このように、まず終了条件で止める処理を書き、それ以外の場合に再び関数自身を呼び出します。
3. 実際の例:1から5までを表示する
では、実際に「1から5までの数字を表示する再帰関数」を作ってみましょう。
func printNumbers(_ n: Int) {
if n > 5 {
return
}
print(n)
printNumbers(n + 1)
}
printNumbers(1)
このコードを実行すると、次のような結果になります。
1
2
3
4
5
ポイントは、n > 5の部分で処理を止めるようにしているところです。これが「終了条件」になります。
4. 応用:階乗(かいじょう)を計算する
再帰関数の有名な例として、「階乗(かいじょう)」の計算があります。
階乗とは、「5!(ファイブ・ファクトリアル)」のように表現されて、5 × 4 × 3 × 2 × 1のように数字を掛け合わせた結果のことです。
func factorial(_ n: Int) -> Int {
if n == 1 {
return 1
}
return n * factorial(n - 1)
}
let result = factorial(5)
print(result)
実行すると、次のような結果になります。
120
この関数では、n == 1が終了条件です。1になったら再帰を終えて、それまでの計算結果を返していきます。
5. 再帰関数のメリットと注意点
再帰関数には、以下のようなメリットと注意点があります。
- コードがシンプルで読みやすい(とくに、入れ子の構造や木構造などに向いています)
- 処理の流れが理解しやすい(同じ関数の中で完結するため)
- ただし、繰り返し回数が多いとエラーになる可能性がある(スタックオーバーフロー)
再帰関数を使うときは、終了条件をしっかり設けて、無限ループにならないように注意しましょう。
6. なぜ再帰関数が必要なのか?
一見すると、for文やwhile文で同じことができそうですが、再帰関数が活躍する場面もあります。
例えば、ツリー構造(フォルダの中にさらにフォルダがあるような構造)をたどる場合、再帰がとても便利です。
複雑な構造を処理する際、コードがすっきりして、エラーが起きにくくなります。
7. 再帰関数は初心者でも使える?
はい、再帰関数は初心者でも使えるようになります。最初は少し難しく感じるかもしれませんが、「関数が自分自身を呼び出す」という仕組みと、「終わる条件を作る」というルールを守れば、だれでも使いこなせます。
最初は数字を数えたり、階乗を計算したりといったシンプルな例から練習するのがおすすめです。