6.1 略
6.2 用lselect(2,…)函数
6.3
function f63(...)
local t = table.pack(...)
t[t.n] = nil
t.n = t.n-1
return table.unpack(t)
end
print(f63(2,3,4,5))
6.4
说下思路
pair每一个元素,把每个元素都随机从数组中选择一个索引的元素进行交换。
function f64(t)
for i = 1,#t do
index = math.random(1,#t)
a = t[i]
t[i] = t[index]
t[index] = a
end
return table.unpack(t)
end
print(f64({2,3,4,5}))
6.5
求全组合
res = {}
tmp = {}
function f65(arr,x)
f652(arr,1,1,x)
end
--arr-数组 n-选择组合中第几个方法 i-从第几个索引开始取 x-需要取多少个元素
function f652(arr,n,i,x)
if(n>x) then
res[#res+1]={table.unpack(tmp)}
return
end
for k = i, #arr do
tmp[n] = arr[k]
f652(arr,n+1,k+1,x)
end
end
f65({1,2,3,4},3)
for i = 1, #res do
for z = 1, #res[i] do
io.write(res[i][z])
end
io.write("\n")
end
6.6
动态语言的函数调用,即使没有递归所占用的栈空间也是不确定的,因为lua函数的参数值和返回值和他们的类型不确定
f()
g()
g()
f()