セクション 5. 章 1
single
再帰
メニューを表示するにはスワイプしてください
定義
再帰関数は、問題をより小さく単純な部分に分割して解決するために自分自身を呼び出す関数。
再帰の主な要素:
- 基本ケース:再帰を停止する条件;
- 再帰ケース:関数がより単純な入力で自分自身を呼び出す部分。
なぜ再帰を使うのか?
一部の問題は、より小さな部分問題として自然に表現できる。再帰は、関数が自分自身を呼び出して単純なケースを処理することで、これらを簡潔かつエレガントに解決する方法を提供する。木構造の処理、経路の探索、構造(例:リストや文字列)の分解などでよく使用される。
シンプルな例
123456def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message("Hello, Recursion!", 3)
この動作を理解するために、ステップごとに見ていきます:
times = 3→ 条件が真、メッセージを出力、print_message(message, 2)を呼び出す;times = 2→ 条件が真、メッセージを出力、print_message(message, 1)を呼び出す;times = 1→ 条件が真、メッセージを出力、print_message(message, 0)を呼び出す;times = 0→ 条件が偽、再帰が停止。
結果: メッセージが3回出力される。
コールスタック
関数が自分自身を呼び出すたびに、新しいフレームがコールスタック(アクティブな関数呼び出しを管理するメモリ構造)に追加されます。ベースケースに到達すると、それまでの呼び出しが逆順で一つずつ完了します。
注意
すべての再帰関数にはベースケースが必要です。ベースケースがない場合、関数は永遠に自分自身を呼び出し続け、RecursionErrorが発生します。
タスク
スワイプしてコーディングを開始
再帰関数 list_sum を実装し、リスト内のすべての要素の合計を計算します。
- リスト
numbersが空の場合は0を返します — これが基本ケースです; - それ以外の場合は、最初の要素に、残りのリストでの再帰呼び出しの結果を加えて返します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 1
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください