文字列を引数とする関数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 |
イ | 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(ア)である。
【キーワード】
・再帰的処理