JS实现斐波那契数列

100 阅读1分钟

定义:斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N)

一.递归实现

function Fibo(n){
    if(n<=0){
        return -1; //输入的n不合法,返回-1
    }
    if(n<=2){
        return 1; //第一项和第二项为1
    }
    if(n>2){
        return Fibo(n-1) + Fibo(n-2); //第三项开始为前两项的和
    }
}

缺点:递归非常占内存,所以不能进行多次递归调用,可以用for循环改进

二.for循环实现

注:从前边依次向后累加,需要定义三个变量:n_value = pre + next

function Fibo(n){
    if(n<=0){
        return -1;
    }
    if(n<=2){
        return 1;
    }
    let pre = 1;
    let next = 1;
    let n_value = 0;
    for(let i = 3;i<=n;i++){
        n_value = pre + next; //每一次循环n_value都是前两个数的和
        pre = next;
        next = n_value;
    }
    return n_value;
}

尾递归优化

注:尾递归,函数最后异步调用自身

function Fibo(n,a1=1,a2=1){
    if(n<=2){
        return a2;
    }
    return Fibo(n-1,a2,a1+a2);
}