-- 克隆(复制)一个二重表的所有内容
function cloneTable(tbl)
local newtbl = {}
for i,v in ipairs(tbl) do
newtbl[i] = {}
for _,v1 in ipairs(v) do
table.insert(newtbl[i],v1)
end
end
return newtbl;
end
-- 合并两个表
function mergeTable(des,src)
for _,v in ipairs(src) do
table.insert(des,v)
end
return des
end
-- 将一个表中的各子表均加入新的元素num
function allInsert(tbl,num)
for _,v in ipairs(tbl) do
table.insert(v,num)
end
end
function steps(tbl,num)
if (num == 0) then
return tbl
elseif (num == 1) then
allInsert(tbl,1)
return tbl
else
local newTbl = cloneTable(tbl)
allInsert(tbl,1)
local tbl1 = steps(tbl,num-1)
allInsert(newTbl,2)
local tbl2 = steps(newTbl,num-2)
return mergeTable(tbl1,tbl2)
end
end
function main ()
n = 6
array = {{}}
result = steps(array,n)
for _,v in ipairs(result) do
str = "{"
for i=1,#v do
str = str .. v[i]
if (i~=#v) then
str = str .. ","
end
end
print (str .. "}")
end
end
main()
-------------------------------------------------------
结果如下:
{1,1,1,1,1,1}
{1,1,1,1,2}
{1,1,1,2,1}
{1,1,2,1,1}
{1,1,2,2}
{1,2,1,1,1}
{1,2,1,2}
{1,2,2,1}
{2,1,1,1,1}
{2,1,1,2}
{2,1,2,1}
{2,2,1,1}
{2,2,2}
2014年06月21日 14点06分
6
回复 矮番薯_爱翻书 :必须做克隆啊,因为如果你简单赋值:newTable = oldTable,这样是传地址的,两边会同时改变,达不到要求。
2014年06月22日 05点06分