文字列を引数とする関数 len、first、butfirstを用いて、関数comp を再帰的に定義した。
comp("11", "101") を呼び出したとき、返されるものはどれか。
〔関数の定義〕
len(S) : 文字列Sの長さを返す。Sが空文字列のときは0を返す。
first(S) : 文字列Sの先頭の1文字のASCIコードを返す。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 エ エラー
ア
if len(A) = 0 and len(B) = 0 then return 0; ・・・@
if len(A) = 0 and len(B) ≠ 0 then return 1; ・・・A
if len(A) = 0 and len(B) = 0 then return -1; ・・・B
if first(A) < first(B) then return 1; ・・・C
if first(A) > first(B) then return-1; ・・・D
return comp(butfirst(A), butfirst(B)); ・・・E
とすると、以下のとおり処理される。
comp("11", "101")
= comp(butfirst("11"), butfirst("101")) ・・・Eより
= comp("1", "01") ・・・butfirst(S) の定義より。
= -1 ・・・first("1") = 1, first("01") = 0だから、Cより
問6 | 目次 | 問8 |