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

有2种算法, 递归和循环迭代, 依次介绍并比较

1.递归

1步台阶, 一种走法, 即f(1)=1;
2步台阶, 2种走法, 一步加一步或是直接跨两步, 即f(2)=2
3步台阶, 最后一次要么跨1步,要么跨2步, 一共的走法为最后一次跨1步的走法f(3-1)加上最后一次跨2步的走法f(3-2), 即f(3)=f(2)+f(1)

n步台阶, 最后一次跨1步的走法f(n-1)加上最后一次跨2步的走法f(n-2), 即f(n)=f(n-1)+f(n-2)

public class StepCount {

    private static int f(int n) {
        if (n == 1 || n == 2) {
            return n;
        } else {
            return f(n - 1) + f(n - 2);
        }
    }

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();    //记录初始时间
        System.out.println(f(40));
        long endTime = System.currentTimeMillis();      //记录终末时间
        System.out.println("所用时间: " + (endTime - startTime) + " 毫秒");
    }
}

走40步台阶耗时256毫秒
在这里插入图片描述

2.循环迭代

private static int f(int n) {
    if (n == 1 || n == 2) {
        return n;
    }
    //初始化为走到第二级台阶的走法
    int one = 2;
    //初始化为走到第一级台阶的走法
    int two = 1;
    int sum = 0;
    for (int i = 3; i <= n; i++) {
        //最后跨两步+最后跨一步的走法
        sum = two + one;
        two = one;	//之前到目标阶跨一步的走法变成到下一目标阶跨两步的走法
        one = sum;	//之前到目标阶的走法变成到下一目标阶跨一步的走法
    }
    return sum;
}

同样走40步台阶, 耗时0毫秒
在这里插入图片描述

递归与循环迭代的比较

递归简洁、易于理解, 但是浪费空间、效率低下(从图中看出相对耗时更久)
迭代正好反之, 不够简洁, 可读性较差, 但是效率更高, 不易造成堆栈溢出

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值