美文网首页
Java算法:有n步台阶,一次只能上1步或2步,共有多少种走法。

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

作者: Bfmall | 来源:发表于2022-01-21 17:13 被阅读0次

分析

1、n=0 和 n=1 的时候 并没有其他可选择的,所以可以得出f(0)=0;f(1)=1;
2、n>=2时情况就变复杂起来,但是这个时候可以操作的步骤也就2种
也就是走1步(n-1)与走2步(n-2)。所以可以得到f(n)=f(n-1)+f(n-2);
从当前状态转为下一状态的通用算法既可。
3、 验证,使用2以上的数字验证几次。

实现

实现算法往往是简单的,及时是复杂算法也花费不了太多精力,所以将问题转换为数学问题是一种很好的选择。当前这种简单算法实现方式更为简单,而且往往不止一种方式。

一、递归方法:

/**
     * 算法:有n步台阶,一次只能上1步或2步,共有多少种走法
     * f(0) = 0 (种走法)
     * f(1) = 1 种走法)
     * f(2) = 2 (种走法,1+1步或2步)
     * 如果n > 2的话, f(3) = 3, f(4) = 5, f(5) = 8,也即:f(5)=f(4)+f(3);
     * 得到公式如下:f(n) = f(n-1) + f(n-2);
     * @return
     */
    public int getWalkNum(int n) {
        if (n <= 2) {
            return n;
        }
        return getWalkNum(n - 1)+ getWalkNum(n - 2);
    }

优点:可能是最好理解的算法了把。代码简单,好理解。
缺点:计算次数颇多,有很多冗余计算。

二、迭代方法:

public int getWalkNum2(int n) {
        if (n <= 2) {
            return n;
        }
        int first = 1, second = 2;
        int third = 0;
        for (int i = 3; i <= n; i++) {
            third = first + second;
            first = second;//计算完third值之后将second值再赋值给first
            second = third;//计算完third值之后将third值再赋值给second,方便下一轮计算
        }
        return third;
    }

优点: 基本没有冗余计算,效率高
缺点: 谁能一次读完就理解的?

相关文章

网友评论

      本文标题:Java算法:有n步台阶,一次只能上1步或2步,共有多少种走法。

      本文链接:https://www.haomeiwen.com/subject/afoehrtx.html