• ベストアンサー

下記のpython の動きが分かりません。

下記のpython の動きが分かりません。 よろしくお願い致します。 def print_list (data, index): if(index != len(data)): print(data [index]) print_list(data, index +1) some_list = [1,2,3,4,5] print_list(some_list, 0) 実行結果は、1       2       3       4       5

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.1

こちらのプログラムは、「再起呼び出し」というテクニックを使っています。 再起呼び出しは、関数自身を呼び出すコードが書かれていて、条件によって再度自分自身を呼び出したり、元の段階に戻ったりします。 ご質問のプログラムの場合、 関数 print_list は、配列要素とインデックス番号を持って呼び出される。 ・インデックス番号が配列要素数と等しければ、何もしないで戻る ←ここちょっと意訳 ・配列の、index番目をprint ※indexが0の時、1番目の要素を指す。pythonのお約束 ・plint_list関数を、配列と index+1 インデックスで呼び出す。 こうなっていますね。 メインプログラムの print_list(some_list, 0) が呼び出されたとき、print_list は次の状態で実行開始します。 print_list([1,2,3,4,5], 0) index=0 は、要素数5と等しくないので、次のprintが実行されます。 print 1 そしてさらに、print_list を呼び出しますが、パラメータが少々変化しています。 print_list([1,2,3,4,5], 1) index=1 は、要素数5と等しくないので、次のprintが実行されます。 print 2 そしてさらに、print_list を呼び出しますが、パラメータが少々変化している…と。 最終的に、index=5 でprint_list 呼び出しが行われたとき、何もせずに戻ります。 積み重なった関数呼び出しは、これをもって順々にreturnしていきます。 print_list([1,2,3,4,5], 0) print 1 __ print_list([1,2,3,4,5], 1) __ print 2 __ __ print_list([1,2,3,4,5], 2) __ __ print 3 __ __ __ print_list([1,2,3,4,5], 3) __ __ __ print 4 __ __ __ __ print_list([1,2,3,4,5], 4) __ __ __ __ print 5 __ __ __ __ __ print_list([1,2,3,4,5], 5) __ __ __ __ __ return __ __ __ __ return __ __ __ return __ __ return __ return return この動作の結果、 1 2 3 4 5 という実行結果になりました。 まあ正直、このプログラムは再起呼び出しの原理を説明するためだけに組まれたものであるので、「こんな処理わざわざ再起で書くことないじゃん?」と思われるでしょうけど。 再起呼び出しは本来、「再起呼び出しを使う方が、スッキリ書ける」という場合に、使います。 例えば、あるディレクトリ以下から条件に一致するファイルのみを探したり、右手法で迷路を脱出するプログラムだったり…とか? 動作の様子を理解しておけば、いつか応用できる問題に当たるかもしれません。

Maltese2020
質問者

お礼

貴重なお時間頂きありがとうございました。

関連するQ&A