🌟

再帰

2024/09/28に公開

理解のため、以下のコードについて考える。

def recurse(x):
   if x > 0:
       print(x)
       recurse(x - 1)

recurse(10)

💡再帰の理解には、関数の呼び出しスタックを追跡する。

関数の構造:

def recurse(x):
   if x > 0:           # 基本ケース(終了条件)
       print(x)        # 現在の x を出力
       recurse(x - 1)  # 再帰呼び出し

実行過程:

recurse(10) が呼び出されると、以下のように進行します:
x = 10: 10 > 0 なので、10 を出力し、recurse(9) を呼び出す
x = 9: 9 > 0 なので、9 を出力し、recurse(8) を呼び出す
x = 8: 8 > 0 なので、8 を出力し、recurse(7) を呼び出す
...
x = 2: 2 > 0 なので、2 を出力し、recurse(1) を呼び出す
x = 1: 1 > 0 なので、1 を出力し、recurse(0) を呼び出す
x = 0: 0 > 0 は偽なので、何も実行せずに関数を終了

💡キーポイント:

  • 基本ケース (x > 0): これが再帰の終了条件です。
  • x が 0 以下になると再帰が停止します。
  • 再帰ステップ (recurse(x - 1)): 各呼び出しで x を 1 減らしています。
  • 呼び出しスタック: 10から始まり、各呼び出しで1ずつ減少し、0で停止します。

出力

  • この関数は 10 から 1 までの数字を順番に出力します:
10
9
8
7
6
5
4
3
2
1

まとめ:再帰を理解するコツ

各ステップでの関数の状態と、それがどのように次の呼び出しにつながるかを追跡する。
この場合、x の値が徐々に減少し、最終的に終了条件(x ≤ 0)に達するまで関数が繰り返し呼び出されることを理解する。

Discussion