初学LUA—实现上楼梯算法

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

要求是使用递归和迭代两种不同的方法来实现。对于我这个算法又渣也没接触过LUA的人来说,真是有点脑子不够用了!!

捣鼓了一整天,了解LUA语法,各种google百度,暂且只能弄出递归解法,至于迭代,还得好好理解理解!

--递归
 function walkStairs(remainingSteps,currentSteps)
   if remainingSteps<=2 then
      printWalkWays(remainingSteps,currentSteps)
   else
      for step=1,2 do
	  walkStairs(remainingSteps-step,currentSteps .." " ..step)
	  end
	end
end

function printWalkWays(remainingSteps,currentSteps)
  if 1==remainingSteps then
      print(currentSteps .." 1")
  elseif 2==remainingSteps then
      print(currentSteps .." 1 1")
	  print(currentSteps .." 2")
  else print(currentSteps)
  end
end

print("enter a number:")
n=io.read("*number")
print(n .."层楼梯的走法有以下几种:")
io.write(walkStairs(n," "))

再改进了下,可以由用户输入数字,确定总共有几阶楼梯

初学LUA—实现上楼梯算法

时间: 2024-10-02 15:59:48

初学LUA—实现上楼梯算法的相关文章

lua解上阶梯问题(按指定格式输出具体走法、迭代、递归)

问题描述 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法. 思路 注释均在代码中 其它 第一次接触lua,很好的脚本语言 源代码 --[[-------------------------------------------------------------------------- 表复制:深复制 --]]-------------------------------------------------------------------------- func

上楼梯

题目描述 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶.请实现一个方法,计算小孩有多少种上楼的方式.为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于100000. 测试样例: 1 返回:1 class GoUpstairs { public: int countWays(int n) { // write code here int a[100000]; for(int i=0;i<=100000;

【坐在马桶上看算法】算法9:开启“树”之旅

我们先来看一个例子. 这是什么?是一个图?不对,确切的说这是一棵树.这哪里像树呢?不要着急我们来变换一下. 是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的.不像?哈哈,看完下面这幅图你就会觉得像啦. 你可能会问:树和图有什么区别?这个称之为树的东西貌似和无向图差不多嘛.不要着急,继续往下看.树其实就是不包含回路的连通无向图.你可能还是无法理解这其中的差异,举个例子,如下.          上面这个例子中左边的是一棵树,而右边的是一个图.因为左边的没有回路,而右边的存在1->2->5

【坐在马桶上看算法】算法12:堆——神奇的优先队列(下)

接着上一Pa说.就是如何建立这个堆呢.可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止).因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下. n=0; for(i=1;i<=m;i++) {     n++;     h[ n]=a[ i];  //或者写成scanf("%d",&h[ n]);     siftup(); } 其实我们还有更快得方法来建立堆.它是这样的. 直接

【坐在马桶上看算法】算法11:堆——神奇的优先队列(上)

堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样. 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节).符合这样特点的完全二叉树我们称为最小堆.反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆.那这一特性究竟有什么用呢? 假如有14个数分别是99.5.36.7.22.17.46.12.2.19.25.28.1和92.请找出这14个数中最小的数,请问怎么办呢?最简单的方法就是将这14个数从头到尾

【坐在马桶上看算法】算法10:二叉树

二叉树是一种特殊的树.二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树.更加严格的递归定义是:二叉树要么为空,要么由根结点.左子树和右子树组成,而左子树和右子树分别是一棵二叉树. 下面这棵树就是一棵二叉树. 二叉树的使用范围最广,一棵多叉树也可以转化为二叉树,因此我们将着重讲解二叉树. 二叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉树.如果二叉树中每个内部结点都有两个儿子,这样的二叉树叫做满二叉树.或者说满二叉树所有的叶结点都有同样的深

数据结构实践——大数据集上排序算法性能的体验

本文是针对[数据结构基础系列(9):排序]的实践项目. [项目 - 大数据集上排序算法性能的体验] 设计一个函数,产生一个至少5万条记录的数据集合.在同一数据集上,用直接插入排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识. 提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法库,作为我们这门课算法库的收官之作: 提示2:本项目旨在获得对于复杂度不同算法的感性认识,由于数据分布

9.9递归和动态规划(一)——小孩上楼梯的方式的种类

/** * 功能:有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶或3阶.计算小孩上楼梯的方式有多少种. */ 两种方法: 方法一: //递归法 /** * 思路:自上而下的方式. * 最后一步可能是从第n-1阶往上走1阶.从第n-2阶往上走2阶或从第n-3阶往上走3阶. * 因此,抵达最后一阶的走法,抵达这最后三阶的方式的综合. * @param n * @return */ public static int countWays(int n){ if(n<0) return 0;

JUMP上楼梯游戏IOS源码

基于cocos2d-x的简单JUMP上楼梯游戏,配有音效.适合新接触cocos2d的同学学习.规则类似 “是男人就上100层”的经典小游戏,就是控制宝宝通过跳上不同高度的踏板而慢慢升高. <ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread-1711-1-1.html