问题:
有n步台阶,一次只能上1步或2步,请共有多少种走法,请使用编程实现。

编程题实现:

方法1-递归

 //实现f(n):求n步台阶,一共有几种走法public int f(int n){if(n<1){throw new IllegalArgumentException(n + "不能小于1");}if(n==1 || n==2){return n;}return f(n-2) + f(n-1);}

方法2-迭代循环


这个算法很难理解,如果有解读清楚的伙伴,还望留言评论。

 public static int loop(int n){if(n<1){throw new IllegalArgumentException(n + "不能小于1");}if(n==1 || n==2){return n;}int one = 2;//初始化为走到第二级台阶的走法int two = 1;//初始化为走到第一级台阶的走法int sum = 0;for(int i=3; i<=n; i++){//最后跨2步 + 最后跨1步的走法sum = two + one;two = one;one = sum;}return sum;}

其他方法(自己编的):

测试的时候发现n<=23时均正确,大于23时就会出现错误,个人认为可能是数值溢出的问题,也有可能是下面代码存在一定的问题,如果有哪位大神能帮忙解释一下,那将不胜感激!

public class Step {
//发现规律,使用排列的形式来计算,根据2的个数来排列
//例如n=6时,结果是A(6,0)+A(5,1)+A(4,2)+A(3,3)。
//以上分别代表0个两步,1个两步,2个两步和3个两步的排列情况。public static void main(String[] args) {System.out.println(stepSum(6));}public static int stepSum(int n){//实现a和b的自动变化,然后实现排列//a最大为n,此时b最小且为0//a--时,b++,但b<=a时一直这样执行,每次结果求和;if(n==0){return 0;}int sum = 0;int a=n,b=0;while(b<=a){sum=sum+A(a,b);a--;b++;}return sum;}public static int A(int a,int b){int sum=1;for(int i=1;i<=b;i++){sum=sum*a;a--;}return sum/Chen(b);}public static int Chen(int x){int sum=1;for(int i=1;i<=x;i++){sum=sum*i;}return sum;}
}

对于n=40,第一种算法,时间700ms,第二种算法,时间<1ms,不过可读性不如第一种算法。

觉得不错的小伙伴可以右上角点个赞或关注哟!
有任何疑问欢迎在评论中指出。

编程题-有n步台阶一次只能上1步或2步共有多少种走法相关推荐

  1. 详细解答【算法题】9个台阶,每次只能上1个或者2个,一共有多少种走法?

    前言 看到这道题感觉还挺有意思的,自己第一时间并没有想出来,是看了类似博文后才豁然开朗,但是我看到的博文中都没有将下面这个数列的来龙去脉说明清楚, f ( n ) = f ( n − 1 ) + f ...

  2. 算法! 有n步台阶,一次只能上1步或2步,共有多少种走法

    有2种算法, 递归和循环迭代, 依次介绍并比较 1.递归 1步台阶, 一种走法, 即f(1)=1; 2步台阶, 2种走法, 一步加一步或是直接跨两步, 即f(2)=2 3步台阶, 最后一次要么跨1步, ...

  3. 字节算法题--N阶台阶,每次走一步或两步,计算共有多少种走法,并将每种走法打印出来。

    N阶台阶,每次走一步或两步,计算共有多少种走法,打印出每种走法. 一 走台阶算法(本质上是斐波那契数列)在面试中常会遇到,描述就如题目那样:总共100级台阶(任意级都行),小明每次可选择走1步.2步或 ...

  4. 【面试题】N阶台阶,每次走一步或两步,计算共有多少种走法,并将每种走法打印出来。

    题目重述:有N阶台阶,每次可以走一步也可以走两步,计算共有多少种走法,并将每种走法打印出来. 以下解法主要利用了二叉树和递归的解题思路. public class StepCompute {priva ...

  5. n级阶梯,人一步只能上1~2级,求一共有几种走法?

    B站上有这样一道题: 大厂算法很难!力扣经典算法解析,小白也能懂!_哔哩哔哩_bilibili数据结构和算法可以让程序员脱胎换骨,刷算法题可以帮助我们通过面试和笔试,找到梦寐以求的工作,进入一线大厂或 ...

  6. 数字字母下划线C语言,【判断题】C语言中的标识符只能由字母、数字和下划线三种字符组成,而且第一个字符只能是字母和下划线。...

    [判断题]C语言中的标识符只能由字母.数字和下划线三种字符组成,而且第一个字符只能是字母和下划线. 更多相关问题 计算机病毒按其寄生方式划分通常可分为().A.系统引导型病毒B.文件型病毒C. 在委托 ...

  7. 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现。

    有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现. 输入: 输入一个整数M(1<=M<=20),表示楼梯的级数. 输出: 输出不同走法 ...

  8. 题目3:一段楼梯共n级台阶,规定每一步只能跨一级或两级或三级。要等上第n级台阶共有几种走法?

    题目3:一段楼梯共n级台阶,规定每一步只能跨一级或两级或三级.要等上第n级台阶共有几种走法? 斐波那契数列问题:递归或动态规划均可解此类问题.跳台阶是典型应用之一. 思路:我们先从最后开始考虑,因为规 ...

  9. 【有n步台阶,一次只能上1步或2步,共有多少种走法?】

    1.递归 public static int f(int n){if (n < 1){throw new IllegalArgumentException(n + "不能小于1&quo ...

最新文章

  1. Android线程实例讲解
  2. 谭浩强C程序设计的课后习题答案
  3. Python的第二种数据类型——String(字符串)
  4. Python学习笔记: Python 标准库概览
  5. boost::function模块实现分配器的测试程序
  6. 解决mysql导数据时,格式不对、导入慢、丢数据的问题
  7. ROS----龟界三角恋
  8. 利用已有的大数据技术,如何构建机器学习平台
  9. boost学习之安装
  10. 当UINavigationController作为UIViewController之后如何去除上部的空白
  11. 编程基本功:BUG描述不要偷懒,不要误导
  12. JDK 1.8 官网下载地址(linux / windows)
  13. 机器学习基石01_课程说明
  14. 手机点餐系统概述_餐馆点菜系统概要设计说明书.doc
  15. 云服务器配置价格表内容
  16. html chm用浏览器打开方式,访问chm文件出现 已取消到该网页的导航的解决方法
  17. 【线代】《线性代数的几何意义》——摘录笔记(一)
  18. jpg转换excel转换器_Excel转换功能变得简单
  19. 【ECS】云服务器ECS是什么
  20. Shell脚本——Shell编程规范及变量

热门文章

  1. 很好很强大的六个SEO关键词分析工具
  2. 智慧灯杆项目案例:点亮科技城市!宁波第一个5G智能路段投入使用!
  3. 人工智能选go还是python_老程序员告诉你人工智能工程师与Python工程师有什么区别?-Go语言中文社区...
  4. 分布式数据库系统面临的问题和挑战
  5. Asymptotic Analysis——渐近分析
  6. html前端小知识:制作简单的纯文字图标按钮
  7. (27)STM32——光敏传感器实验笔记
  8. VRTK 初识vrtk,如何在自己的项目中使用vrtk
  9. visual怎么运行python_Visual Studio运行Python程序(超级详细)
  10. xshell选项卡不见了