lang
1# -*- coding: utf-8 -*- 2 3def saiki(n): 4 5#1 if n == 10: return 6#2 print(n) 7#3 saiki(n + 1) 8#4 print(n) 9 10 11 12saiki(5)
これどういう風に動いてるか番号でお願いします(何度もすみません..)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
この説明ではどうでしょうか?
順番に展開します。展開が面倒なのでn=5ではなくn=8から
始めさせてください。
n=8を代入します。
lang
1def saiki(8): 2 if 8 == 10: return #処理なし 3 print(8) #8を表示 4 saiki(8 + 1) #saiki(9)を呼び出す。 5 #saiki(9)から処理がもどる 6 print(8) #8を表示
saiki(9)を展開します。
※呼び出し先ではn=9だけど、呼び出し元ではn=8のままというところです。
(デバッガのイメージで理解しようとするとこのへんでつまずく。)
lang
1def saiki(8): 2 if 8 == 10: return #処理なし 3 print(8) #8を表示 4 #saiki(9)を呼び出す。 5 if 9 == 10: return #処理なし 6 print(9) #9を表示 7 saiki(9 + 1) #saiki(10)を呼び出す。 8 #saiki(10)から処理がもどる 9 print(9) #9を表示 10 #saiki(9)から処理がもどる 11 print(8) #8を表示
saiki(10)を展開します。
lang
1def saiki(8): 2 if 8 == 10: return #処理なし 3 print(8) #8を表示 4 #saiki(9)を呼び出す。 5 if 9 == 10: return #処理なし 6 print(9) #9を表示 7 #saiki(10)を呼び出す。 8 if 10 == 10: return #saiki(10)処理を抜ける 9 #saiki(10)から処理がもどる 10 print(9) #9を表示 11 #saiki(9)から処理がもどる 12 print(8) #8を表示
整理すると
lang
1def saiki(8): 2 print(8) #8を表示 3 print(9) #9を表示 4 print(9) #9を表示 5 print(8) #8を表示
投稿2015/07/13 13:36
編集2015/07/13 16:34総合スコア2883
0
n=5でsaikiが起動
→#1-#3まで実行(#1の条件は成立しないのでreturnはしない,以下n=9まで同じ),#3にてn=6でsaiki起動
→n=6のsaikiが#1-#3まで実行
→n=7でsaikiが#1-#3まで実行
→n=8でsaikiが#1-#3まで実行
→n=9でsaikiが#1-#3まで実行
→n=10でsaiki#1の条件が成立し,return
→n=9の#4が実行される
→n=8の#4が実行される
→n=7の#4が実行される
→n=6の#4が実行される
→n=5の#4が実行される
投稿2015/07/13 09:26
編集2015/07/13 09:30総合スコア20649
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/13 13:21
退会済みユーザー
2015/07/13 14:05
2015/07/13 15:42
退会済みユーザー
2015/07/17 16:34
0
カッコの中身はその時の n の値です。
lang
1# -*- coding: utf-8 -*- 2 3def saiki(n): 4 5 if n == 10: # 2(5) 5(6) 8(7) 11(8) 14(9) 17(10) 6 return # 18(10) 7 print(n) # 3(5) 6(6) 9(7) 12(8) 15(9) 8 saiki(n + 1) # 4(5) 7(6) 10(7) 13(8) 16(9) 9 print(n) # 19(9) 20(8) 21(7) 22(6) 23(5) 10 11saiki(5) # 1
投稿2015/07/13 09:06
総合スコア4514
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。