再帰(recursion)は、関数 が 自分自身を呼び出す ことで問題を解く手法です。大きな問題を、「同じ形をした一回り小さな問題」に分けて解いていくときに力を発揮します。
たとえば「フォルダの中の全ファイルを数える」なら、「このフォルダのファイル数+(中の各サブフォルダについて同じ処理)」と考えられます。サブフォルダにも同じ関数を当てはめるのが再帰です。
再帰を安全に使う鍵は、必ず「これ以上分けない終わり」を用意する ことです。これを基底条件(ベースケース)と呼びます。
flowchart TD
A["問題を解く"] --> B{もう分けられない?}
B -- はい --> C["答えを返す(基底条件)"]
B -- いいえ --> D["小さい問題にして自分を呼ぶ"]
D --> A
基底条件を忘れると、無限ループ のように呼び出しが止まらなくなり、やがてエラーになります。木構造のたどり方や、数学的な定義をそのままコードにする場面で、再帰は簡潔で美しい解き方になります。