再帰:人形の中の人形
8分11秒 | アルゴリズム再帰FE
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
どうもこんにちは。再帰、なんだかちょっと難しそうな言葉ですよね。 でも大丈夫です。実はこれ、すごく面白い考え方で、私たちの身近なところにも隠れてるんですよ。 今日はプログラミングの世界で使われる、この不思議な「自分自身を呼び出す」っていうアイデアを一緒に探検してみましょう。 そうなんですよ。プログラムが自分自身の仕事をもう一回呼び出すって、 んー、なんだか鏡の中にまた鏡が映ってるみたいでちょっと混乱しますよね。一体どういう仕組みで何のためにそんなことするんでしょうか? この「え、これって無限に続いちゃうんじゃないの?」っていう感覚、すっごくよく分かります。怖く感じますよね。 でも安心してください。ちゃんと賢い出口が用意されてるんです。実は、 この無限ループの恐怖を避けるための鍵こそが、再帰を理解する上での、まあ一番美しい部分だったりするんですよ。さあ、その秘密を解き明かしていきましょうか。 さてさて、再帰の謎を解くためのとっておきの秘密兵器、ご紹介しますね。 それが、この可愛らしいロシアの人形、マトリョーシカです。え、プログラミングと何の関係があるの?って思いますよね。 でも実はこの人形こそが、再帰のど真ん中、その核心を完璧に説明してくれちゃうんです。 マトリョーシカ人形、開けたことあります?一番大きな人形をこうパカッと開けると中からそっくりな、 でもちょっとだけ小さい人形が出てきますよね。で、その人形をまた開けるとさらに小さいのが出てくる。 これを繰り返していくと、最後にはもうこれ以上は開けられない一番小さな「芯」の部分にたどり着くわけです。 再帰のロジックってまさにこれと全く同じなんですよ。 つまり、再帰の考え方の肝は、大きな問題をもっと小さな「自分自身のミニチュア版」に分解していくってことなんです。 一見すると「うわー、これ複雑で手強そうだな」って思うような大きな問題も、同じ形をした小さな問題にどんどん分けていくことで、 最後には「あれ?なんだ、こんなに簡単だったのか」っていう一番シンプルな核心にたどり着ける。これが再帰のめちゃくちゃパワフルなところですね。 よし、じゃあこのマトリョーシカの考え方が実際のプログラミングでどう役立つのか具体的に見ていきましょう。 題材はですね、プログラミングの練習問題でよく出てくる「階乗」の計算です。 この一見すると単純な計算の中に、再帰のエッセンスがギュッと詰まってるんですよ。 はい、今日のお題はこちら。5の階乗を計算してみましょう。 数学の授業でやりましたよね。5×4×3×2×1。まあ電卓を使えば一瞬ですけど、これをあえて再帰的に、つまりさっきのマトリョーシカ方式で解いてみようじゃありませんか。 まずは、こう考えるんです。「んー、5の階乗の答えが知りたいんだけど、 もしもだよ?もしも4の階乗の答えが分かってたら、それに5をかけるだけで済むじゃん」って。 これがまさに、一番大きなマトリョーシカを開けて一つ小さい人形を取り出すのと同じ作業なんです。 よし、この調子で行きましょう。じゃあ、4の階乗を知るにはどうすればいいか。もう分かりますよね? そうです。そのまた一つ小さい、3の階乗の答えが必要になるわけです。 ほら、問題がどんどん小さくシンプルになっていくのが見えてきませんか? で、次は3の階乗。これを解くためには今度は2の階乗に助けを求めます。 この「自分とそっくりな、もっと小さな問題にどんどん頼っていく連鎖」、これこそが再帰の心臓部なんですよね。 さあ、ゴールはもうすぐそこですよ。2の階乗は1の階乗さえ分かれば解けますからね。 これがマトリョーシカの一番小さな人形にたどり着く最後のステップになります。 やったー!ついにたどり着きました。一番小さな問題、1の階乗です。 この答えはもう誰でも知ってますよね。そう、1です。 これ以上分解する必要がない、究極にシンプルな答え。これがマトリョーシカの芯です。 そしてここからが本当に面白いところ。今度は逆の旅が始まるんですよ。 さて、ここでちょっと、最初に感じた「あのこれ終わりがないんじゃ」っていう不安、思い出してください。 この不安を完全に吹き飛ばしてくれる、再帰におけるもう本当に本当に一番大事なルールが登場します。 これさえあれば、もう無限ループの悪夢にうなされることはありません。 それが、この「停止条件」です。これはもう絶対的なルール。 どんな再帰的な処理も、「ここまで来たらストップ!おしまい!」っていうはっきりしたゴール、つまり出口を絶対に持たなくちゃいけないんです。 もしこれがないと、プログラムは道に迷ったまま、永遠に自分自身を呼び出し続けるという恐ろしいことになっちゃいますからね。 さあ、ここからがマジで面白いところですよ。 一番小さな人形の芯、つまり1の階乗の答えが「1」だと分かりました。 なので今度はマトリョーシカを一つずつ閉じていくみたいに、答えを組み立てていきましょう。まずこの「1」っていう答えを使って、 一つ外側の2の階乗を計算します。2 * 1で答えは2。OKですね。 はい、2の階乗は「2」でした。じゃあ、この「2」っていう答えを持って、 さらにその外側、3の階乗を解きに行きましょうか。3 * 2で答えは6。 うんうん、どんどん答えが組み上がってきましたね。 この連鎖はまだまだ続きますよ。3の階乗の答え「6」が次の扉を開ける鍵になるんです。 この鍵を使って4の階乗を計算すると、4 * 6で24!見事! そしてついにフィナーレです。さっき手に入れた4の階乗の答え「24」を使って、 私たちが一番最初に解きたかったあの、一番大きな問題、5の階乗に挑みます。 5 * 24で、答えは…120!やりましたね! これで一番大きくて複雑に見えた、あの5の階乗っていうマトリョーシカ人形の問題が見事に解けました。 やったことって、実はすごくシンプルですよね。問題をどんどん小さく分解していって、 一番簡単な芯にたどり着いたら、今度はその答えを使いながら元通りに組み立てていっただけ。これこそが再帰の魔法なんです。 さて、最後に、今日学んだことをいつでも思い出せるように、3つの超シンプルなルールにまとめておきましょう。 これがあなたの再帰攻略マニュアルになります。ルールはたったの3つ。いいですか? まず1つ目。関数が「自分自身を呼び出す」こと。2つ目。 「大きな問題を同じ形の小さな問題に分解する」こと。 破損して絶対に、絶対に忘れちゃいけない3つ目のルール。必ず「処理を終わらせるための停止条件を持つ」こと。 この3つさえ押さえておけば、もう再帰はあなたの強力な味方です。 今日見てきたように、再帰っていうのはただの小難しいプログラミングのテクニックじゃないんですよね。 むしろ、複雑で巨大に見える物事を、シンプルで扱いやすいパーツに分解して考えるっていう、ものすごくエレガントで強力な思考のツールなんです。 この新しい問題解決の考え方、プログラミングだけじゃなくて、あなたの仕事とか勉強とか、 日々の生活の中にある課題にも応用できると思いませんか? さて、あなたが次にこのマトリョーシカみたいに分解して見事に解決してやる大きな問題って、一体何でしょうね。
このコンテンツは Web society で視聴・学習できます。