← メディア一覧

再帰の迷宮:スタックオーバーフローの呪い

5分58秒 | アルゴリズム基礎FE

基本情報技術者試験の頻出テーマを解説した動画コンテンツです。

トランスクリプト(字幕テキスト)

今回はね、ある一人の若きエンジニアの物語を通して 美しく、そして恐ろしい「再帰関数」っていう技術の、その深淵を覗いてみようと思います。 これはコードの綺麗さに心を奪われた者が直面する、現代のサイバースリラーとも言えるかもしれません。 ヨミさん、ちょっとこれ見てくださいよ。僕が作ったファイル検索プログラム、再帰関数で書いてみたんです。 いや、たった数行でどんな深い階層も探せるんですよ。これ、もうコードの芸術じゃないですか? そうね、再帰は確かに強力なツールよ。ただ、その力には時として大きな危険が潜んでいるの。 この時のアキラ君は、まだそのことを知らなかったのね。 だってそうでしょ?左の再帰関数を見てください。エレガントで簡潔でパワフル。 それに比べて右の、まあ、普通のループ処理なんて、安全かもしれないですけど正直ちょっと冗長で面倒じゃないですか。 僕がこれを芸術って呼びたくなる気持ち分かりますよね? でもアキラ君、その美しい芸術にはちゃんと出口は用意されているのかしら? 出口?もちろんですよ、完璧です。よし、せっかくだからあの巨大な本番サーバーのストレージで、 この芸術品の実力、試してみましょうか。 そして、ここから物語の雰囲気は一気に変わっていくの。彼の自信はまず緊張へ、 そして取り返しのつかないパニックへと姿を変えることになる。 よーし、実行。ポチッとな。 ん?なんだろう、この音。サーバー室のファンがなんかすごい勢いで回り始めてる。 今まで聞いたことないような、甲高い音だ。 えっ?嘘。なんだこれ。画面が固まった。ま、待って、何も反応しない。 どうなってんだよ。 アキラ君、残念だけど、君のプログラムは今、合わせ鏡の迷宮に迷い込んでしまったのよ。 さて、ここからが本題。アキラ君の自信作を飲み込んでしまったこの終わらない迷宮、 その正体は一体何だったのか。技術的な核心に迫っていきましょう。 その迷宮の本当の名前は、スタックオーバーフロー。 これはね、コンピューターのメモリの中で起きる一種の事故なの。 関数が自分自身を呼び出すたびに、この仕事あとでやりますっていうメモ書き、つまり未完了のタスクがどんどん積み上がっていく。 そのメモの山が、メモリっていう部屋の天井にごつんとぶつかってしまった状態、それがスタックオーバーフローよ。 まさにこのスライドの通りね。関数が自分を呼び出してタスクが積まれていく。 それが延々と繰り返されて、やがてメモリの限界がきてシステム全体がクラッシュする。 すごくシンプルだけど、破壊的な連鎖反応なのよ。 でも、どうして僕のプログラムはなんでタスクを終われなかったんですか? なんで無限に呼び出し続けたんですか?一体どこにそんな罠が。 答えはね、教科書の中にはない現実世界のデータの厄介さにあったの。 その罠の名前は、循環参照よ。 例えばこういうこと。君のプログラムがAフォルダを調べて、Bフォルダを見つける。 次にBフォルダを調べると、そこにはAフォルダへの近道、ショートカットがあった。 プログラムは真面目だから、またAフォルダに戻って、そしてまたBフォルダを見つける。これを永遠に繰り返す。 ほら、合わせ鏡の迷宮が完成したでしょ。 絶望的かもしれないけど、この迷宮にもたった一つだけ脱出口は存在するの。 ここからはその解決策と、この恐ろしい経験から私たちが得るべき教訓について話しましょうか。 そのたった一つの脱出口、それがベースケース。つまり終了条件のこと。 プログラムの教科書には必ず書いてある、基本的な概念よね。 でもその本当の、命としての重要性は、アキラ君みたいにこういう絶望的な状況に陥って初めて、骨身に沁みて分かるものなのかもしれないわね。 覚えておくといいわ。現場ではね、ただ動くことよりも、いかに安全に止まれるかのほうがずっと価値が高いことだってあるのよ。 エレガントに動くだけじゃなく、予期せぬ事態が起きてもちゃんと安全に停止できる設計、 それがプロの仕事なの。 だからこの話のまとめとして、みんなが明日から使える勝利の10秒チェックを覚えて帰って。 再帰処理を書く前、たった10秒でいいから、自分にこう問いかけるの。 この関数に絶対に保証された出口はあるか。循環参照みたいな汚いデータは想定してるか。 このスライドにある4つの質問。これだけで、アキラ君みたいな悲劇はきっと防げるはずよ。 最後に、この問いを考えてみてほしい。 美しい解決策は、一体どんな時に危険すぎて使えないものになるのか。 技術的なエレガントさと現実世界の安全性。私たちはその線にどうやって引いていくべきなのか。 この物語がそのバランスを考える、一つのきっかけになってくれたら嬉しいわ。

このコンテンツは Web society で視聴・学習できます。