(剑指offer)斐波那契数列

牛客网:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

n<=39

解题思路:这里如果用递归的话时间复杂度和空间复杂度都会很高

function Fibonacci(n){
    if(n == 0 || n == 1) {
        return n
    }
    return Fibonacci(n-1) + Fibonacci(n-2)
}

所以我们用迭代的方法

迭代相加,并保存需要不断相加的两个数

function Fibonacci(n){
    // write code here
    let f1 = 1
    let f2 = 1
    if(n<=0){
        return 0
    }
    if(n == 1 || n== 2) {
        return 1
    }
    while(n-- > 2){
        f1 = f1+f2
        f2 = f1 - f2
    }
    return f1
}

leetcode:

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

var fib = function(n) {
    if(n == 0 || n ==1) {
        return n
    }
    let a = 1, b =0
    while (n-- > 1){
        a = a+b
        b = a-b
        a %= 1000000007
    }
    return a
};
不积跬步无以至千里
原文地址:https://www.cnblogs.com/lyt0207/p/12522298.html