斐波那契数列,尾递归

2020-06-01  本文已影响0人  monkeyfly36

定义:

实现:

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

缺点:在一个算法中,如果递归函数调用过多次数,那么就会导致堆栈溢出。

解决方法:尾递归--不会发生栈溢出

function fibonacci(n, a1 = 1, a2 = 1) {
    if (n==1 || n==2) return a2
    return fibonacci(n-1, a2, a1 + a2)
}

延伸1--循环(使用解构,给初始值,然后不断的累加)

function fibonacci(n){
    if (n==1 || n==2) return 1
    var a1 = 1, a2 = 1
    for (let i = 2; i < n; i++){
        [a1, a2] = [a2, a1 + a2]
    }
    return a2
}

延伸2--generator

上一篇 下一篇

猜你喜欢

热点阅读