本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成23年度 秋期 応用情報技術者試験問題と解説

問7

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