回答終了
基本情報技術者試験の過去問の解答に対する質問です。拙い質問になりますがご容赦ください。この問題は再帰的処理の条件分岐をどう理解しているか?という趣旨の問題だと思うのですがn=0ではなかった時の処理で{}内に”nを印字する”が2回あるのですが解答には1度しか印字されずn-1の処理後また同じ処理を繰り返しています。 選択問題なので正解は分かるのですが先述の事が納得できずモヤモヤしています。 お分かりになる方解説をお願い致します。
121閲覧
1人がこの質問に共感しました
>この問題は再帰的処理の条件分岐をどう理解しているか?という趣旨の問題だと思う 再帰的処理の条件分岐をどう理解しているかという趣旨ではなくて、引数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.です。これが「納得」というやつの本当の意味です。 つまり、あなたの思い通りの結果を生み出す処理をあなたが定義して広めてもよいということであり、これが(理解ではなく)「納得」という言葉の意味です。 なのでもっともかんたんな方法は「これはこのように動く」と納得するだけです。
< 質問に関する求人 >
基本情報技術(東京都)この条件の求人をもっと見る
求人の検索結果を見る
< いつもと違うしごとも見てみませんか? >
覆面調査に関する求人(東京都)この条件の求人をもっと見る