欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Lua程序设计(第4版)》:第6章练习答案

程序员文章站 2022-03-14 11:00:37
...

练习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函数的参数值、返回值和他们的类型都是不确定的。

先留个坑,以后补。

end

相关标签: Lua