平成21年 春期 応用情報技術者 午前 問7

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

[関数の定義]
len(S) :  文字列Sの長さを返す。
Sが空文字列のときは0を返す。
first(S) :  文字列Sの先頭の1文字のASCIIコードを返す。
Sが空文字列のときはエラーを返す。
butfirst(S) :  文字列Sの先頭の1文字を除いた残りの文字列を返す。
Sが空文字列のときはエラーを返す。

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
 イ  0
 ウ  1
 エ  エラー


答え ア


解説
comp(“11”, “101”)の処理を行う。
まず、引数の長さを比較する。
 len(A) = len(“11”) = 2
 len(B) = len(“101”) = 3
したがって、comp( )の長さの比較の条件には合わないので、先頭文字の比較を行う。
 first(A) = first(“11”) = 1
 first(B) = first(“101”) = 1
これも条件に合わないので、comp(butfirst(A), butfirst(B))が行われる。
 comp(butfirst(“11”), butfirst(“101”)) = comp(“1”, “01”)

次に、comp(“1”, “01”)の処理を行う。
まず、引数の長さを比較する。
 len(A) = len(“1”) = 1
 len(B) = len(“01”) = 2
したがって、comp( )の長さの比較の条件には合わないので、先頭文字の比較を行う。
 first(A) = first(“1”) = 1
 first(B) = first(“01”) = 0
これは、first(A) > first(B)が成り立つので、この関数の戻り値は-1(ア)である。


キーワード
・再帰的処理

キーワードの解説

戻る 一覧へ 次へ