セクション 5. 章 1
single
再帰
メニューを表示するにはスワイプしてください
定義
再帰は、関数が自分自身を呼び出すことで問題をより小さな部分に分割して解決するプログラミング手法。繰り返し構造や自然な部分問題を持つ課題に特に有用。
再帰の主な要素:
- 基本ケース:再帰を停止する条件;
- 再帰ケース:関数がより単純な入力で自分自身を呼び出す部分。
なぜ再帰を使うのか?
一部の問題は、より小さな部分問題として自然に表現できる。再帰は、関数が自分自身を呼び出して単純なケースを処理することで、これらを簡潔かつエレガントに解決する手法。木構造の処理、経路探索、構造(例:リストや文字列)の分解などでよく利用される。
1234567def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
この再帰プログラムがどのように動作するかを段階的に確認:
- 条件判定:
times > 0の場合、関数は処理を続行。ここではtimes = 3なので条件は真; - メッセージの出力: 関数は
"Hello, Recursion!"を出力; - 再帰呼び出し: 関数は
times - 1で自分自身を呼び出す; - 繰り返し: この処理は
timesが0になるまで続く; - 終了:
times > 0の条件が偽になると再帰が終了し、プログラムが完了。
結果:メッセージ "Hello, Recursion!" が__3回__出力される。
フローの理解:
関数が自分自身を呼び出すたびに、新しいフレームがコールスタック(アクティブな関数呼び出しを管理するメモリ構造)に追加される。関数は times の値を小さくしながら自分自身を呼び出し続ける。ベースケース(times == 0)に到達すると停止する。その後、各呼び出しが逆順で一つずつ完了する。このバックトラッキングの動作が再帰の本質的な仕組み。
タスク
スワイプしてコーディングを開始
文字列として与えられた電話番号には、スペース、ハイフン、かっこ、その他の数字以外の文字が含まれている場合があります。目的は、再帰を用いて数字のみを抽出することです。
- 入力文字列
numberが空の場合、空文字列を返します。 number条件でisdigit()メソッドを使い、文字列ifの最初の文字が数字かどうかを判定します。- 数字であれば、再帰呼び出しで2文字目以降の部分文字列を
format_phone_numberに渡し、その結果と最初の数字を連結します。 - 数字でない場合は、最初の文字をスキップして
format_phone_numberを再帰的に呼び出します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 1
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください