Leetcode - 509. 斐波那契数

// 斐波那契数
Fibonacci 数列 是最典型的让我们了解递归算法的例子。
递归核心:
1. 递归关系表达式
2. 递归终止条件

  1. 直观的递归,调用自身
    很多次重复计算,不提倡。
class Solution {
    public int fib(int N) {
        if (N == 0) return 0;
        if (N == 1) return 1;   
        return fib(N-1)+fib(N-2);
    }
}
  1. 递归 + memo (自顶向下迭代)
    分析可知具有重复子结构,将计算结果保存在一个数组memo里面,减少重复计算,节约时间。
class Solution {
    public int[] memo = new int[31];
    // private Integer[] memo = new Integer[31];
    public int fib(int N) {
        if (N < 2) {
            return N;
        }        
        for (int i = 0; i< 31;i ++){
            memo[i] = -1;
        }
        memo[0] = 0;
        memo[1] = 1;        
        return helper(N);        
    }
    public int helper(int N){       
        if (memo[N] == -1){
        // if (memo[N] == null){ //memo是包装类Integer定义的
            memo[N] = helper(N-1) + helper(N-2);      
        }
        return memo[N];
    }
}
  1. 使用动态规则(Dynamic Programming)
    (自底向上迭代)
class Solution {
    public int fib(int N) {
        if (N<=1) return N;
        return helper(N);
    }    
    public int helper(int N){
        int[] memo = new int[N+1];
        memo[0] = 0;
        memo[1] = 1;
        for (int i = 2; i <= N; i++){
            memo[i] = memo[i-1] + memo[i-2]; 
        }
        return memo[N];
    }
}

学习开心
精诚所至,金石为开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值