平成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 となる。

EXCEL VBAのご相談なら ファーストマクロ 



問6 目次 問8
ファーストマクロ TOPページ