再帰とは?終了条件と、反復との使い分け

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

再帰とは(全体像)

再帰とは、ある処理(関数)が、その中で「自分自身」を呼び出す手法のことだ。同じ処理を、対象を少しずつ小さくしながら、くり返していく。

合わせ鏡(鏡が鏡を映す)をイメージすると分かりやすい。ただし、どこかで止めないと、永遠に続いてしまう。

ここで一番のポイント。再帰には、「終了条件」が必須だ。「ここまで来たら止まる」という条件を必ず用意する。これがないと、自分を呼び続けて止まらなくなり(無限ループ)、メモリがあふれてしまう(スタックオーバーフロー)。「再帰に終了条件は要らない」と思い込むと誤りになる。


詳しく:終了条件と、反復との使い分け

ここが心臓部。再帰のポイントを押さえよう。

再帰のポイント

項目やさしい意味
再帰呼出処理が、自分自身を呼び出す
終了条件ここで止まる、という条件(必須)
用途階乗・フィボナッチ・ツリー探索・分割統治(クイック/マージソート)など
反復との使い分け再帰が常によいとは限らない(ループが効率的なことも)

再帰は、「終了条件」と「再帰呼出(自分を呼ぶ)」の2つで成り立つ。終了条件で止まり、それまでは自分を呼び続ける。

そして、もう1つ大事なこと。再帰が、いつも反復(ループ)より優れているわけではない。すっきり書ける場面もあるが、深い再帰はメモリを多く使うので、ループのほうが効率的なこともある。「再帰は、いつもループより優れている」と思い込むと誤りだ。場面によって使い分けよう。

わかりやすく言い換えると

身近なたとえで整理しよう。

再帰は、「合わせ鏡のように、自分自身を呼び出してくり返すこと」のイメージ。同じことを、少しずつ小さくしながらくり返す。

「終了条件が必須」というのは、どこかで止める合図がいること。要するに、止まる条件がないと、永遠に続いてしまう。

「反復との使い分け」は、再帰が向く場面もあれば、ループが向く場面もあること。つまり、どちらが常に優れている、というわけではない。


試験のツボ

🔴 一番出る:再帰の正体

①処理(関数)が、自分自身を呼び出す手法

②同じ処理を、少しずつ小さくしながらくり返す

🔴 次に出る:終了条件が必須

①「ここで止まる」という終了条件が必須

②ないと、止まらなくなる(無限ループ・スタックオーバーフロー)

🟡 押さえると安定:反復との使い分け

①再帰が常によいとは限らない

②深い再帰はメモリを多く使う。ループが効率的なことも


よくある間違い

「再帰には、終了条件は必要ない」→ ✗  終了条件は必須。ないと、自分を呼び続けて止まらなくなる。

「再帰は、つねに反復(ループ)より優れている」→ ✗  場面次第。深い再帰はメモリを多く使い、ループが効率的なこともある。

「再帰とは、別の関数を1回だけ呼び出すことだ」→ ✗  再帰は、自分自身を呼び出す手法。別の関数を1回呼ぶこととは違う。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(再帰の正体)

📝 オリジナル問題 1 再帰の正体

再帰に関する次の記述のうち、最も適切なものはどれか。

  1. 社員の出退勤を記録して、毎月の給与を計算するためのしくみである
  2. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  3. 処理(関数)が、その中で、自分自身を呼び出していく手法である
  4. 完成したシステムを宣伝して、より多く売るための広告活動である
データパン
データパン 解答・解説

解答は 3 だぱん。

再帰は、処理(関数)が、自分自身を呼び出す手法なんだぱん。合わせ鏡のように、同じことをくり返すイメージだぱん。

選択肢1は給与計算、選択肢2は請求書の事務、選択肢4は広告で、どれも違うぱん。

選択肢判定理由
1給与計算のしくみではない
2請求書の事務の話
3自分自身を呼び出す手法で正しい
4広告活動ではない

オリジナル問題2(終了条件)

📝 オリジナル問題 2 再帰の終了条件

再帰の終了条件に関する次の記述のうち、最も適切なものはどれか。

  1. 終了条件は必須で、ないと止まらなくなるのだ(無限ループ)
  2. 終了条件は必要なく、なくても問題ないとされているものだ
  3. 社員の給与を計算するときだけ、終了条件がいるとされている
  4. 取引先へ請求書を郵送するときだけ、終了条件がいるとされる
データパン
データパン 解答・解説

解答は 1 だぱん。

再帰の終了条件は、必須で、ないと止まらなくなる(無限ループ)んだぱん。「ここで止まる」という合図が必要だぱん。

選択肢2の「必要ない」、選択肢3の給与、選択肢4の請求書は、いずれも違うぱん。

選択肢判定理由
1終了条件は必須で正しい
2終了条件は必須
3給与計算のときだけではない
4請求書のときだけではない

オリジナル問題3(反復との使い分け)

📝 オリジナル問題 3 再帰と反復

再帰と反復(ループ)の関係に関する次の記述のうち、最も適切なものはどれか。

  1. 再帰は、どんなときも必ず反復より優れているとされている
  2. 場面次第で、再帰が向くときも、ループが向くときもあるのだ
  3. 社員の給与を計算するときだけ、再帰を使うとされているものだ
  4. 取引先へ請求書を郵送するときだけ、再帰を使うとされている
データパン
データパン 解答・解説

解答は 2 だぱん。

再帰と反復は、場面次第で、再帰が向くときも、ループが向くときもあるんだぱん。再帰が常に優れているわけではないんだぱん。

選択肢1の「必ず優れている」、選択肢3の給与、選択肢4の請求書は、いずれも違うぱん。

選択肢判定理由
1常に優れているとは限らない
2場面次第で使い分けるで正しい
3給与計算のときだけではない
4請求書のときだけではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る