【Java实现剑指offer】斐波那契数列问题

求斐波那契Fibonacci数列的第n项

  • 递归
public int Fibonacci(int n){
    int[] result = {0,1};
    if(n<2)
        return result[n];
    return Fibonacci(n-1)+Fibonacci(n-2);

}
  • 非递归
public int Fibonacci(int n){
    int[] result = {0,1};
    if(n<2)
        return result[n];
    int sum = 0;
    int left = 0;
    int right = 1;
    for(int i=2;i<=n;i++){
        sum = left + right;
        left = right;
        right = sum;
    }
    return sum;
}

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:
第一次跳如果跳1个台阶,剩余n-1;如果跳2个台阶,剩余n-2;

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法

有了上面的铺垫,如果第一次跳1个台阶,剩余n-1;如果第一次跳2个台阶,剩余n-2;
如果第一次跳3个台阶,剩余n-3。。。。

f ( n ) = f ( n 1 ) + f ( n 2 ) + f ( n 3 ) + . . . + f ( 1 )

f ( n 1 ) = f ( n 2 ) + f ( n 3 ) + . . . + f ( 1 )

两式相减 f ( n ) = 2 f ( n 1 )

public class Solution {
    public int JumpFloorII(int target) {

        int[] result = {0,1};
        if(target<2)
            return result[target];
        int sum = 1;
        for(int i=2;i<=target;i++){
            sum *= 2;
        }
        return sum;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42055967/article/details/80170093