関数の定義における落とし穴(出題編)

以下の Lua 関数 append は、第一引数として渡された配列形式のテーブルに、
第ニ引数以下で渡された配列形式のテーブルを全て追加するものである:

http://ideone.com/SGfpS

function append( t, t1, ... )
  if t1 == nil then return end
 
  local n = #t
  for _, x in ipairs(t1) do
    n = n + 1
    t[n] = x
  end
 
  return append( t, ... )
end
 
-- テスト
local t = { 1, 2 }
append( t, { 3 }, {}, { 4, 5 }, { 6, 7, 8, 9, 10 } )
 
-- t は { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } になる
print( table.concat( t, ", " ) )

この関数 append にはパフォーマンス上の問題点が幾つかある。指摘せよ。


解答・解説: http://d.hatena.ne.jp/gintenlabo/20100714/1279132903