- 1 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:02.60 ID:dU5z27As.net]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.99【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1469177649/
- 35 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 10:52:07.29 ID:8ULjF/bN.net]
- 独習C第4版 P197ページの再帰のプログラムなのですが、
#include <stdio.h> void recurse(int i); int main(void) { recurse(0); return 0; } void recurse(int i) { if(i < 10) { recurse(i + 1); printf("%d " , i); } } 実行結果は 9 8 7 6 5 4 3 2 1 0 の動作がわかりません。10になるまでprintfが実行されずに+1され続けるのはいいのですが、 なぜ10になったらiが戻り始めるのでしょうか? あまりに初心者な質問ですみません。
- 36 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 11:03:28.04 ID:6ImFpJhK.net]
- 引数だけ書くと
0+1 1+1 ・・・ 9+1 ここまではprintfまで来ないまま再帰 9+1でifに入らないからrecurseからリターン printfがiを表示(9)してリターン printfがiを表示(8)してリターン の繰り返し
- 37 名前:34 mailto:sage [2016/11/10(木) 11:07:42.28 ID:8ULjF/bN.net]
- >>35
早速のレスありがとうございます。 >9+1でifに入らないからrecurseからリターン ということはmain関数のreturn 0でプログラムは終了してしまうのではないですか? なぜprintfが呼ばれるのかわからんのですが。(iが減算される理由もわかりません)
- 38 名前:34 mailto:sage [2016/11/10(木) 11:12:33.48 ID:8ULjF/bN.net]
- if(i < 10) {
recurse(i + 1); printf("%d " , i); } で recurseとprintfは同じifブロックに入っているので、ifが偽なら両方共スキップされると思うのですが、 なぜprintfだけ呼ばれるのでしょうか?
- 39 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 11:20:27.66 ID:69ogPHI/.net]
- 丁度再帰打ち切り付近の挙動
i=8 で受けた recurse recurse(8+1) の呼び出し i=9 で受けた recurse recurse(9+1) の呼び出し i=10 で受けた recurse 条件合致せず戻る printf("%d", i) で 引数の 9 を書く i=9 で受けた recurse から戻る printf("%d", i) で 引数の 8 を書く i=8 で受けた recurse から戻る
|

|