n 個の正の整数 x1, x2, ・・・, xn が並んだ線形リストを [x1, x2, ・・・, xn] で表し、空リストは[ ]で表す。次のように再帰的に定義される関数 func(L)を、L = [1,3,2] を実引数として呼び出したとき、print文によって表示される数字はどれか。ここで、プログラム中の = は等号、:=
は代入を表す。
〔関数の定義〕
(1) first([x1, x2, ・・・, xn])はx1を返す。
(2) butfirst([x1, x2, ・・・, xn]) は [x2, ・・・, xn] を返す。butfirst([x]) は [ ] を返す。
(3) max(x, y) は、x ≧ y であれば x を返し、そうでなければ y を返す。
func(L)
begin
if L = [ ] then return 0;
A := first(L);
B := func(butfirst(L));
C := max(A, B);
print C;
return C;
end
ア 123 イ 133 ウ 223 エ 233
ウ
func([1, 3, 2]) をトレースする。
A = first([1, 3, 2]) = 1
B = func(butfirst([1, 3, 2])) = func([3, 2]) ・・・@
ここでfunc([3, 2]) が再帰呼び出しされ、
A = first([3, 2]) = 3
B = func(butfirst([3, 2])) = func([2]) ・・・A
さらに、ここでfunc([2]) が再帰呼び出しされ、
A = first([2]) = 2
B = func(butfirst([2])) = func([ ]) = 0
C = max(2, 0) = 2
print 2
return 2
となり、func([2]) = 2 となる。従って、Aに戻り、
B = func(butfirst([3, 2])) = func([2]) = 2
C = max(3, 2) = 3
print 3
return 3
となり、 func([3, 2]) = 3 となる。よって、@に戻り、
B = func(butfirst([1, 3, 2])) = func([3, 2]) = 3
C = max(1, 3) = 3
print 3
return 3
end
以上より、print文によって表示される数字は 233 となる。
問6 | 目次 | 問8 |