教えて!しごとの先生
教えて!しごとの先生
  • 回答終了

基本情報技術者試験の過去問の解答に対する質問です。拙い質問になりますがご容赦ください。

基本情報技術者試験の過去問の解答に対する質問です。拙い質問になりますがご容赦ください。この問題は再帰的処理の条件分岐をどう理解しているか?という趣旨の問題だと思うのですがn=0ではなかった時の処理で{}内に”nを印字する”が2回あるのですが解答には1度しか印字されずn-1の処理後また同じ処理を繰り返しています。 選択問題なので正解は分かるのですが先述の事が納得できずモヤモヤしています。 お分かりになる方解説をお願い致します。

続きを読む

121閲覧

1人がこの質問に共感しました

回答(5件)

  • >この問題は再帰的処理の条件分岐をどう理解しているか?という趣旨の問題だと思う 再帰的処理の条件分岐をどう理解しているかという趣旨ではなくて、引数nの値がproc関数を再帰呼び出ししていく中で、どのように変化していくかを問うています。 >n=0ではなかった時の処理で{}内に”nを印字する”が2回あるのですが解答には1度しか印字されずn-1の処理後また同じ処理を繰り返しています。 一つのproc関数で2回引数nが出力されています。値は2回とも同じです。 再帰呼び出しされているとはいえ、上から下に流れていく構造なのでproc(n-1)を実行してから出力しています。 トレースすると以下のようになります。 proc(5) 出力5 proc(5-1) 出力4 proc(4-1) 出力3 proc(3-1) 出力2 proc(2-1) 出力1 proc(1-1) n=0ならば戻る true proc(1-1)の時出力無し proc(2-1)に戻る proc(2-1) 出力1 proc(3-1) 出力2 proc(4-1) 出力3 proc(5-1) 出力4 proc(5) 出力5

    続きを読む
  • >再帰的処理の条件分岐をどう理解しているか という趣旨の問題だと思う これがまず違います。再帰はおおよそ再帰を終わらせる部分と再帰関数そのものの処理と再帰を行う箇所の三つからなります。 そしてこの問題はどちらかというと再帰の基本です。なのでelseを付ける必要はないからです。 問題文では当該箇所を指示しやすいようにつまり「n=0ではなかった時の処理」と言及可能なようにわざわざelseの個所を入れているからです。 なのでelseは本質的には不要です。だから条件分岐の例題ではないです。ifの個所は再帰から帰るための条件の個所だからです。 (C++) | ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO https://paiza.io/projects/qKkC3R17bGXLj1uJcg-H8Q 次は「納得」するかどうかの部分ですが、歴史的経緯ではそのコードとその説明がどのように出来上がったかと言うと、同時です。つまり「このコードではこのように動くべきだ」として実際に実装されたのが各種のプログラミング言語です。なのであなたの言う通り「納得」の段階となります。 「このように書けばこのような結果になるべきであるとどっかの誰かが勝手に決めた」という体系がプログラミング言語だからです。なので本当に「納得」するしかないです。あるいはそれを「(個人の)好み」と言い換えてもいいです。「わたくしはこの結果が好きではないので受け入れない」という言説でも当然O.K.です。これが「納得」というやつの本当の意味です。 つまり、あなたの思い通りの結果を生み出す処理をあなたが定義して広めてもよいということであり、これが(理解ではなく)「納得」という言葉の意味です。 なのでもっともかんたんな方法は「これはこのように動く」と納得するだけです。

    続きを読む
  • n-1の処理を呼ぶことにより他の数字群についてたびたび印字をしています。 nが0になると、Uターンが始まり、 「n-1の処理を呼んだあとの ”nを印字する” 」が、最後に処理したものから順に(つまり逆順に)行われます。 n-1の処理を呼んだあと、待ってるんですよね。戻ってくるのを。

    続きを読む
  • > 解答には1度しか印字されず 印字 呼出 印字 なので、2回印字されますよ? proc(3)で呼び出すと、 proc(3) 3を印字 proc(2)で呼び出し     proc(2)     2を印字     proc(1)で呼び出し         proc(1)         1を印字         proc(0)で呼び出し             proc(0)             戻る         1を印字         戻る     2を印字     戻る 3を印字 戻る となるので、 321123 とすべて2回印字されます。

    続きを読む

< 質問に関する求人 >

基本情報技術(東京都)

この条件の求人をもっと見る

< 平日勤務で週末はリフレッシュしたい人におすすめ >

正社員×土日祝休み(東京都)

求人の検索結果を見る

もっと見る

この質問と関連する質問

    < いつもと違うしごとも見てみませんか? >

    覆面調査に関する求人(東京都)

    この条件の求人をもっと見る

    Q&A閲覧数ランキング

    カテゴリ: 資格

    転職エージェント求人数ランキング

    • 1

      続きを見る

    • 2

      続きを見る

    • 3

      続きを見る

    あわせて読みたい
    スタンバイプラスロゴ

    他の質問を探す

    答えが見つからない場合は、質問してみよう!

    Yahoo!知恵袋で質問をする

    ※Yahoo! JAPAN IDが必要です

    スタンバイ アプリでカンタン あなたにあった仕事見つかる