再帰関数とリスト操作
アルゴリズムとデータ構造難易度: ★★★☆☆
n個の正の整数x₁, x₂, ..., xₙが並んだ線形リストを[x₁, x₂, ..., xₙ]で表し、空リストは[ ]で表す。次のように再帰的に定義される関数func(L)を、L = [1, 3, 2]を実引数として呼び出したとき、print文によって表示される数字はどれか。ここで、プログラム中の=は等号、:=は代入を表す。
【関数の定義】 (1) first([x₁, x₂, ..., xₙ])はx₁を返す。 (2) butfirst([x₁, x₂, ..., xₙ])は[x₂, ..., xₙ]を返す。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
出典: 平成23年度秋期 応用情報技術者 午前 問7