過去問解きまくり研究所 ホーム

平成21年度 春期 午前 問7

アルゴリズム

再帰に関する問題

文字列を引数とする関数 len, first, butfirst を用いて,関数 comp を再帰的に定義した。comp(“11”, “101”) を呼び出したとき,返されるものはどれか。

〔関数の定義〕

comp(A, B)
begin
    if  len(A) = 0  and  len(B) = 0  then  return   0;
    if  len(A) = 0  and  len(B) ≠ 0  then  return   1;
    if  len(A) ≠ 0  and  len(B) = 0  then  return  −1;
    if  first(A) < first(B)  then  return   1;
    if  first(A) > first(B)  then  return  −1;
    return  comp(butfirst(A), butfirst(B));
end
答えと解説を見る

✓ これが正解ア−1

解説

最初に異なる文字を比べて、大きい側に −1 が返ります。

この再帰関数は、二つの文字列を先頭から 1 文字ずつ比べて大小を判定する仕組みです。両方の長さがゼロなら 0、片方だけが空なら空でないほうを判定に反映し、先頭の ASCII コードに差があればその向きに応じて 1 か −1 を返します。差がなければ先頭を 1 文字ずつ削って残りを同じ手順で比べ直します。この考え方で 11 と 101 を並べると、まず先頭の 1 と 1 が同じなので判定が持ち越され、先頭を落として 1 と 01 の比較に進みます。この段で先頭は 1 と 0 で、比べる相手のほうがコードの小さい文字になっています。関数の定義では、先頭が相手より大きいときに −1 を返すよう定めてあります。したがって、返される値は −1 になります。

ほかの選択肢はなぜ違うのか

出典:平成21年度 春期 応用情報技術者試験 午前 問7

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)