斐波拉契数的几种求法

斐波拉契数列求法的题目有:

  • 509 斐波拉契
  • 面试题10-1 斐波拉契数列
  • 70 爬楼梯
解法一:

傻递归

public class Solution {
    public int fib(int N) {
        if (N < 2) return N;
        return fib(N - 1) + fib(N - 2);
    }
}
解法二:

带缓存的递归

public class Solution {

    //缓存
    static int[] cache;

    public int fib(int N) {
        //初始化缓存
        cache = new int[N + 1];
        return myfib(N);
    }

    public int myfib(int n) {
        //退出条件
        if (n <= 1) {
            cache[n] = n;
            return cache[n];
        }
        //如果不存在就递归调用存入缓存
        if (cache[n] == 0){
            cache[n] = myfib(n-1)+myfib(n-2);
        }
        return cache[n];
    }
}
解法三

迭代法:

public class Solution {
    public int fib(int n) {
        if (n < 2) {
            return n;
        }
        int f0 = 0;
        int f1 = 1;
        int f2 = 0;

        for (int i = 2; i <= n; i++) {
            f2 = f0 + f1;
            f0 = f1;
            f1 = f2;
        }
        return f2;
    }
}
全部评论

相关推荐

rndguy:个人思路,抛砖引玉。 要我的话我先问清楚需求:要什么精度,什么速度,什么环境。 如果精度要求很低,平台也有点柔性的话,只需要输出pwm,然后开个中断记录各多少个脉冲,如果脉冲时间不对齐了就反馈控制电流加减就行。要求同步要求稍微高点的话可以在脉冲间做个线性插值,同步精度会高些。 但总体来说,如果直流有刷只有脉冲没有好的编码器的话很难做精准定位什么的(除非用一些电机磁路结构相关的奇技淫巧如高频注入什么的),所以要求更高就需要大量参数辨识和校准,那就慢多了。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务