アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラミングのペーパーテスト
実行結果がどのように表示されるか答えよ
#include <stdio.h>
void hoge(int n){
if( n <= 0 ){
printf("0 ");
} else {
printf("%d ",n);
hoge(n-1);
printf("%d ",n);
}
}
void main(){
hoge(3);
}

答え 3210123

3210までは分かるんですけどなんで123が表示されるか
分かりません
教えてほしいです

A 回答 (1件)

行番号追加して、



01:#include <stdio.h>
02:void hoge(int n){
03: if( n <= 0 ){
04: printf("0 ");
05: } else {
06: printf("%d ",n);
07: hoge(n-1);
08: printf("%d ",n);
09: }
10:}
11:void main(){
12: hoge(3);
13:}

実行される処理は、
11 12      hoge(3)を呼び出し
 02 03 05 06  3を表示
 07       hoge(2)を呼び出し、以下を一旦省略
 08       3を表示

で3が2個表示されるのはOK?


その上で、省略された部分を書くと、

11 12          hoge(3)を呼び出し
 02 03 05 06      3を表示
 07           hoge(2)を呼び出し
  02 03 05 06     2を表示
  07          hoge(1)を呼び出し
    02 03 05 06   1を表示
    07        hoge(0)を呼び出し
      02 03 04   0を表示
    08        1を表示
  08          2を表示
 08           3を表示


> なんで123が表示されるか

06行目が実行された後、08行目も実行されるから。
    • good
    • 1
この回答へのお礼

分かりやすい説明ありがとうございました

お礼日時:2022/07/09 15:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!