文字列を引数とする関数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
答え ア
【解説 】
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 (ア)である。
【キーワード 】
・再帰的処理
【キーワードの解説 】
再帰的処理(recursive)
処理(関数)の中で自分自身の処理を呼び出すことです。
再帰を使用することで、処理を単純に表すことができます。
もっと、「再帰的処理」について調べてみよう。
戻る
一覧へ
次へ