回答編集履歴

1 注釈の追加

iwamoto_takaaki

iwamoto_takaaki score 2763

2015/07/14 01:33  投稿

この説明ではどうでしょうか?
順番に展開します。展開が面倒なのでn=5ではなくn=8から
始めさせてください。
n=8を代入します。
```lang-ここに言語を入力
def saiki(8):
   if 8 == 10: return #処理なし
   print(8)          #8を表示
   saiki(8 + 1)      #saiki(9)を呼び出す。
                      #saiki(9)から処理がもどる
   print(8)          #8を表示
```
saiki(9)を展開します。
 ※呼び出し先ではn=9だけど、呼び出し元ではn=8のままというところです。  
 (デバッガのイメージで理解しようとするとこのへんでつまずく。)  
```lang-ここに言語を入力
def saiki(8):
   if 8 == 10: return #処理なし
   print(8)          #8を表示
   #saiki(9)を呼び出す。
       if 9 == 10: return #処理なし
       print(9)          #9を表示
       saiki(9 + 1)      #saiki(10)を呼び出す。
                          #saiki(10)から処理がもどる
       print(9)          #9を表示
   #saiki(9)から処理がもどる
   print(8)          #8を表示
```
saiki(10)を展開します。
```lang-ここに言語を入力
def saiki(8):
   if 8 == 10: return #処理なし
   print(8)          #8を表示
   #saiki(9)を呼び出す。
       if 9 == 10: return #処理なし
       print(9)          #9を表示
       #saiki(10)を呼び出す。
           if 10 == 10: return #saiki(10)処理を抜ける
       #saiki(10)から処理がもどる
       print(9)          #9を表示
   #saiki(9)から処理がもどる
   print(8)          #8を表示
```
整理すると
```lang-ここに言語を入力
def saiki(8):
   print(8)          #8を表示
   print(9)          #9を表示
   print(9)          #9を表示
   print(8)          #8を表示
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る