Java实现斐波那契数列

x33g5p2x  于2021-03-13 发布在 Java  
字(0.9k)|赞(0)|评价(0)|浏览(432)

斐波那契数列的公式为

f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)

最直观的方式是使用递归,但是递归需要一定的栈空间,而且有重复计算,例如:f(8) = f(7) + f(6),f(7) = f(6) + f(5) 这样,会多次计算,可以使用循环的方式,每次计算之后累加,如从f(2)开始,一直计算到f(n),期间一直保存这f(cur-1),f(cur-2)

递归程序

public int get(int i) {
	if(i<0)return -1;
	if(i == 0||i == 1)return i;
	return get(i-1) + get(i-2);
}

循环程序

public int get(int i) {
    if(i < 0) return -1;
    if(i == 0||i == 1)return i;
    int N$2 = 0, N$1 = 1,idx = 2,ret=0;
    while(idx <= i) { // 0 1 1 2 3 5 8
        ret = N$2 + N$1;
        N$2 = N$1;
        N$1 = ret;
        idx++;
    }
    return ret;
}

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法,返回3

规则
输入: int n 楼梯的长度
输出:int 多少种方法
case:

n 小于0
n等于0
n等于1
n等于2

思路

假设第n个台阶有f(n)种方法,f(n-1)种再加上一步1个台阶就到达n了,此时有f(n-1)种,f(n-2)楼梯的时候再加上一步2个台阶就到达n了,此时有f(n-2)种,因此:f(n) = f(n-1)+f(n-2),f(0) = 0 ,f(1) = 1 f(2) = 2

代码

public int climbStairs(int i) {
        if (i <= 0) {
            return 0;
        }
        if (i == 1) {
            return i;
        }
        int N$2 = 1, N$1 = 1, idx = 2, ret = 0;
        while (idx <= i) { // 0 1 1 2 3 5 8
            ret = N$2 + N$1;
            N$2 = N$1;
            N$1 = ret;
            idx++;
        }
        return ret;
    }

相关文章

微信公众号

最新文章

更多