問題
Python3において再帰関数を定義することを考える。このとき、再帰関数が正しく動作するために満たす必要がある条件は、次のうちどれですか。
選択肢
(a) ループ変数を初期化する
(b) 関数呼び出しを無限に行う
(c) ベースケースを定義する
(d) 関数内でグローバル変数を使用する
- a
- b
- c
- d
Python3 再帰関数を定義するための条件
答え
(c)
解説
正解は「ベースケースを定義する」です。
ベースケースとは再帰関数が自己呼び出しを終了する条件のことです。ベースケースが定義されていない場合、その関数は自己呼び出しを無限に続けることになり、スタックオーバーフローが発生します。
例えば、階乗を計算する再帰関数では、ベースケースは以下のように定義されます。(n=0または1のとき)
def factorial(n): # ベースケース: nが0または1の場合、1を返す if n == 0 or n == 1: return 1 # 再帰呼び出し: n-1の階乗を計算 else: return n * factorial(n - 1) print(factorial(5)) # 120
一方で、以下のようにベースケースを定義せずに関数を呼び出すと、エラーが発生します。
def factorial(n): # 再帰呼び出しのみ: n-1の階乗を計算 return n * factorial(n - 1) print(factorial(5)) # 120
出力:
Traceback (most recent call last): File "Main.py", line 8, in <module> print(factorial(5)) # 120 File "Main.py", line 6, in factorial return n * factorial(n - 1) File "Main.py", line 6, in factorial return n * factorial(n - 1) File "Main.py", line 6, in factorial return n * factorial(n - 1) [Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded
このことから、再帰関数の条件としてベースケースを定義する必要があることがわかりました。
【その他の選択肢】
ループ変数を初期化する
→ 再帰関数とループ(for文、while文など)は関係ありません。ループ変数の初期化とは、以下のコードのように、各繰り返しで変数iが10, 20, 30, と初期化される処理のことをいいます。
for i in [10, 20, 30, 40, 50]: print(i)
関数呼び出しを無限に行う
→ スタックオーバーフローが発生するため、誤りです。呼び出し回数は、必ず有限である必要があります。
関数内でグローバル変数を使用する
→ 再帰関数でグローバル変数を使用することは可能ですが、再帰関数の条件とは関係ありません。再帰関数を定義するときに、グローバル変数の使用は必須ではありません。
テスト一覧
スキルテストが提供しているテストの一覧です。ぜひ学習や実力チェックに役立ててください。
- Pythonテスト
- ビジネス基礎力診断テスト
- 英語会計 理解度テスト(USCPA FAR対応)
- 世界の国旗当てクイズ
- アメリカ合衆国の州旗当てクイズ
- 金融リテラシーテスト
- Pythonテスト【初級者向け】
- 論理力レベルチェック
- HTMLタグ理解度チェック
- 天文宇宙テスト
- Linux理解度チェック
- 関西弁テスト
- 魚の漢字クイズ検定
- 元素記号テスト・検定
- 四字熟語テスト
- 日本歴史テスト
- 山手線検定
- 北海道弁テスト
- 博多弁テスト
- 京都弁テスト
- 神奈川の方言テスト
- 長野県方言・信州弁テスト
- 沖縄弁(うちなーぐち) テスト
- 広島弁テスト
- 青森の方言(津軽弁)テスト
- Pythonテスト【本番モード】
- 猫種検定
- 日本の方言テスト
- 犬種検定
- 仮想通貨スキル診断
- 寺院・神社当て検定
- うさぎ当て検定
- 寺院・神社当て検定 <関東版>
- Pythonスキルチェック<組み込み関数編>
- Python3×データサイエンス試験
- 化学物質検定
- 花クイズ
- ディズニーテスト
- 現代建築物検定
- ドメインテスト
- 日本の偉人クイズ
- 素数テスト
- Japanese Famous Kanji Exam
- Japanese Animal Kanji Exam
- 富山弁テスト
- 八丈方言クイズ
- 讃岐弁クイズ(香川県)
- 英語クイズ 国名
- 国コードテスト (2文字版)
- 国コードテスト (3文字版)
- 魚の英語クイズ
- 英語(花)クイズ
- 英語(植物)クイズ
- 英語(宇宙)クイズ
- 地名読み方クイズ(市区町村)
- 英語(料理名)クイズ
- 英語(元素名)クイズ
- 鹿児島方言テスト
- 英文読解問題 中学生レベル
- 英語クイズ 感染症
- 英語クイズ 不動産
- 日本の方言 大分弁クイズ