もしあなたも再帰関数を見て、鏡の中に無限に映っているような感覚を覚えたことがあるなら、ようこそ!この記事はあなたのためのものです。今日は再帰を分類していきます。シンプルで楽しく、わかりやすく、たくさんの例をあげていきます。さあ始めましょう!🚀

🔎 人間の言葉で言うと、再帰とは何ですか?
再帰とは、関数がそれ自体を呼び出すことです(慌てないでください!)。これは、問題を小さなサブタスクに分割して解決するために必要です。これは、いわゆる「固定点」に達するまで繰り返されます。 ベースケース - 停車地点。
🎭 2つの鏡の間に無限の反射があると想像してみてください。あなた、そして少し小さなあなた、そして非常に小さなあなた、そしてその先へ。それが再帰です。ただし、反射の代わりに関数の呼び出しです。さらに、これらの呼び出しはそれぞれ、前の呼び出しよりも少し簡単になり、最後は、誰でも対応できるものになります(つまり、誰でも使える関数です!)。
📦 または別の例:箱の中に箱を想像してみてください。その中に別の箱があり、最後の最小の箱に到達するまで続きます。プログラミングでは、この最後の箱が基本ケースです。以上です。これ以上「解凍」するものはありません。結果をまとめる時です。
📌 例1:階乗は再帰のお気に入り
階乗 数字 n(n!で表される)は、1からnまでのすべての数字の積です。
例:
5! = 5 × 4 × 3 × 2 × 1 = 120Pythonでの再帰実装:
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)各呼び出しは、1または0に達するまでnを減らし、関数は結果を返し始めます。階段を降りて階段を上るのとよく似ています。
📌例2:nまでの数の合計
それでは、1からnまでのすべての数字を足しましょう。
def sum_to(n):
if n == 1:
return 1
else:
return n + sum_to(n - 1)sum_to(5) を呼び出す:
sum_to(5)
= 5 + sum_to(4)
= 5 + (4 + sum_to(3))
= 5 + (4 + (3 + sum_to(2)))
= 5 + (4 + (3 + (2 + sum_to(1))))
= 5 + 4 + 3 + 2 + 1 = 15これが再帰の魔法です。タスクは理解しやすいものに「縮小」され、次に応答に「折りたたまれます」。
📌 例3:カウントダウン(と便利なスキル)
def countdown(n):
if n == 0:
print("Let's go!")
else:
print(n)
countdown(n - 1)countdown(5) を起動すると、次のようになります。
5
4
3
2
1
Поехали!再帰は常に値を返す必要はありません。単にアクションを実行することもできます。これは、それを適用し始めるのに最適な方法です。
🧨 ほとんどの人が犯す間違い(そしてそれらを避ける方法)
❌ 基本的なケースを忘れました - そして、無限の再帰にこんにちは。関数が停止する必要がある場所を確認してください。
❌ 条件が正しくありません たとえば、
n <= 0の代わりにif n == 0を使用すると、再び無限大になります。❌ 再帰は、再帰なしの方が簡単な場合に — いつも自問してください:「ここでは本当に再帰が必要ですか?」
🌟 本当に再帰が役に立つとき
再帰は次の場合に便利です。
回避する必要があります ネストされた構造、たとえば、フォルダまたはJSON。
課題 自然に分割されます 部分的に(例えば、並べ替え、検索ツリー)。
試してみる必要がある すべてのルート - パズル(迷路、数独など)の解決策を探すのに最適です。
📈 再帰の欠点(慌てないで、知っておいてください)
各再帰呼び出しは追加のメモリ(呼び出しスタック)です。
多くのレベル→スタックがいっぱいになります(特にPythonで)。
最適化しない場合、通常のサイクルよりも動作が遅くなります。
✨ 再帰と永遠に友達になる方法
✏️ 描画 — 呼び出しツリー、スタック、アクションシーケンス。
🎮 練習してください - 最も単純なものであっても、計算を解きましょう。階乗、合計、逆順の文字列など。
🔍 進捗状況を確認する — ステップバイステップ、
print()またはデバッガーで。🧪 サイクルと比較 — 長所と短所を確認するために、両方のバージョンを書いてください。
🧪 例4:文字列の反転
def reverse_string(s):
if len(s) == 0:
return ""
return s[-1] + reverse_string(s[:-1])reverse_string("Code") → "kidoK"
このように、行を美しく、わかりやすく反転させることができます。
🎬 まとめ
再帰とは:
タスクを簡単なステップに分割する方法。
基本条件に達するまでに自身を呼び出す関数。
手懐けることができる魔法。
まだ完全に理解していない場合は、記事をもう一度読んでください。これも再帰です😉
