lua面试

使用lua语言解出下题,分别用递归、迭代二种方式, 写出详细的代码:

楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法。

例:3阶台阶的走法是

{

{ 1, 1, 1, },

{ 1, 2, },

{ 2, 1, },

}

递归:

  1. function SteupInput( Input,Num )  
  2.     if Input==1 then  
  3.         print(Num .." 1 ")  
  4.         m = m + 1  
  5.     elseif Input==2 then  
  6.     print(Num .." 1 1")  
  7.     print(Num .." 2")  
  8.     m = m + 2  
  9.     else print("请输入正确的阶层数")  
  10.     end  
  11. end  
  12.   
  13. function Way( InputNnum,Steup )  
  14.     if InputNnum<=2 then  
  15.         SteupInput(InputNnum,Steup)  
  16.     else  
  17.         for Num=1,2 do  
  18.             Way(InputNnum-Num,Steup .." "..Num)  
  19.         end  
  20.     end  
  21. end  
  22.   
  23. print("请输入阶层数")  
  24. m = 0  
  25. i = io.read("*number")  
  26. io.write(Way(i," "))  
  27. print("一共有" ..m.. "方法")  
function SteupInput( Input,Num )
	if Input==1 then
		print(Num .." 1 ")
		m = m + 1
	elseif Input==2 then
	print(Num .." 1 1")
	print(Num .." 2")
	m = m + 2
	else print("请输入正确的阶层数")
	end
end

function Way( InputNnum,Steup )
	if InputNnum<=2 then
		SteupInput(InputNnum,Steup)
	else
		for Num=1,2 do
			Way(InputNnum-Num,Steup .." "..Num)
		end
	end
end

print("请输入阶层数")
m = 0
i = io.read("*number")
io.write(Way(i," "))
print("一共有" ..m.. "方法")


迭代:
  1. function Way( n )     
  2.     resultAll = {}  
  3.     tempArr1 = {""}  
  4.     resultAll[1] = tempArr1  
  5.     tempArr2 = {" 1"}  
  6.     resultAll[2] = tempArr2  
  7.     for i=3,n+1 do  
  8.         resultAll[i] = {}  
  9.         for j = 1,#(resultAll[i-1]) do  
  10.             table.insert(resultAll[i],resultAll[i-1][j].." 1")  
  11.         end  
  12.         for j = 1,#(resultAll[i-2])do  
  13.             table.insert(resultAll[i],resultAll[i-2][j].. " 2")  
  14.         end  
  15.     end  
  16.     for i=1,#resultAll[n+1] do  
  17.         print(resultAll[n+1][i])  
  18.     end  
  19. end  
  20.   
  21. print("请输入阶层数")  
  22. n = io.read("number")  
  23. io.write(Way(n))  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值