《Lua程式設計(第4版)》:第6章練習答案
阿新 • • 發佈:2018-12-11
練習6-1
function exercise6_1(array)
for i=1,#array,1 do
io.write(table.unpack(array,i,i)," ")
end
end
練習6-2
function exercise6_2(num,...)
local sp=table.pack(...)
for i=1,#sp,1 do
io.write(sp[i]," ")
end
end
練習6-3
function exercise6_3(...) local sp=table.pack(...) for i=1,#sp-1,1 do io.write(sp[i]," ") end end
練習6-4
經典洗牌演算法
function exercise6_4(tab)
math.randomseed(os.time())
for i=#tab,2,-1 do
local randnum=math.random(i)
local sp=tab[i]
tab[i]=tab[randnum]
tab[randnum]=sp
end
return tab
end
練習6-5
function exercise6_5(tab,begin) begin=begin or 0 if begin==0 then exercise6_5_name=1 end if exercise6_5_anstable==nil or begin==0 then exercise6_5_anstable={} end if exercise6_5_sptable==nil or begin==0 then exercise6_5_sptable={} end if begin==(#tab) then exercise6_5_anstable[exercise6_5_name]=table.move(exercise6_5_sptable,1,#exercise6_5_sptable,1,{}) exercise6_5_name=exercise6_5_name+1 else table.insert(exercise6_5_sptable,tab[begin+1]) exercise6_5(tab,begin+1) table.remove(exercise6_5_sptable) exercise6_5(tab,begin+1) end return exercise6_5_anstable end
返回一個序列,其中包含著若干個序列,是輸入序列元素的所有可能組合。
注意每次遞迴出現結果時,給序列賦值的應該是儲存臨時結果的表的克隆!
呼叫方法如下
array={1,2,3,4,5}
ans=exercise6_5(array)
for i=1,#ans do
print(table.unpack(ans[i]))
end
print(#ans)
練習6-6
這題不太懂,個人感覺是動態語言的函式呼叫時,即使沒有使用遞迴所佔用的棧空間也不是確定的。
因為Lua函式的引數值、返回值和他們的型別都是不確定的。
先留個坑,以後補。