応用情報技術者試験(AP) 平成23年秋期試験 問7

応用情報技術者試験(AP) 平成23年秋期試験一覧

HOME年度別に解く分野から選んで解く参考書受験についてその他の情報処理試験リンク集

応用情報技術者試験(AP) 平成23年秋期試験 問7

n 個の正の整数x 1, x 2,..., x n が並んだ線形リストを[x 1, x 2,..., x n ]で表し、空リストは[ ]で表す。
次のように再帰的に定義される関数func(L )を、L = [1, 3, 2]を実引数として呼び出したとき、print文によって表示される数字はどれか。
ここで、プログラム中の=は等号、:=は代入を表す。

[関数の定義]
 (1)  first([x 1, x 2,..., x n ])はx 1を返す。
 (2)  butfirst([x 1, x 2,..., x n ])は[x 2,..., x n ]を返す。
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]); //A=1
B :=func([3,2]); //butfirst([1,3,2])=[3,2]
 /* 再帰呼出し1 start */
 A := first([3,2]); //A=3
 B :=func([2]); //butfirst([3,2])=[2]
  /* 再帰呼出し2 start */
  A := first([2]); //A=2
  B :=func([]); //butfirst([2])=[]
   /* 再帰呼出し3 start */
   L = [] return 0; //再帰呼出し2のBに0が返る
   /* 再帰呼出し3 end */
  C :=max(2,0); //C=2
  print 2;
  return 2; //再帰呼出し1のBに0が返る
  /* 再帰呼出し2 end */
 C :=max(3,2); //C=3
 print 3;
 return 3; //呼び出し元関数のBに3が返る
 /* 再帰呼出し1 end */
C :=max(1,3); //C=3
print 3;
return 3;

end
print文で出力される数字を順番にすると、エ「233」になります。






◀戻る

 一覧へ  次へ▶                                               






Copyright (C) 応用情報技術者試験(AP)~午前過去問題解説ガイド. All Rights Reserved.