サンプル問題 [科目B]問13について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
今年受験さん  
(No.1)
はじめまして。今年受験と申します。

https://www.fe-siken.com/kakomon/sample/b13.html

上記の問題ですがアもelseにいってしまい無限にmiddleをリターンするように思えてしまうのですが、どなたかわかる方解説いただけますか。
また正解のウの解説もいただけると幸いです。
2023.03.08 14:36
小福さん 
(No.2)
本問題はちょっと嫌らしいですね。
答えはウです。

要素数は2ですので、high = 2となります。
while内をStep事に実行すると
middleは、lowが1ですので、middle = (1+2)/2、つまり、1 となります。
dataは昇順、且つ、data[2]=target(targetがdataの末尾要素と等しい)ですので、
最初のIfの条件式、data[1]<targetは真となり、low に middleつまり1が代入されます。
つまり、lowとhighの値は全く変化しませんので、このwhile loop は無限loopとなります。

判り辛い説明ですが、理解頂けましたか?
2023.03.08 15:26
y4 kさん 
(No.3)
この投稿は投稿者により削除されました。(2023.03.08 15:32)
2023.03.08 15:32
boyonboyonさん 
FE ブロンズマイスター
(No.4)
ア:Low=1,high=1,middle=1なのでdata[1]=targetとなり  return  1 ループを抜けます
イ:Low=1,high=2,middle=1なのでdata[1]=targetとなり  return  1 ループを抜けます
ウ:Low=1,high=2,middle=1なのでdata[middle]=data[1]<target(=data[2]です)となり
    Low←middle(=1)が実行され、Low=1となる。同じ条件に戻るので繰り返し、無限ループになる。
2023.03.08 17:54
今年受験さん  
(No.5)
小福さん、boyonboyonさん
ご回答ありがとうございます。
解決できました!
2023.03.09 09:39

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop