SOURCE

/**
 * 求1+2+3+...+n之和
 */
/**
 * 迭代
 * "自下而上"地解决问题
 * 时间效率:效率高,无函数调用开销
 * 内存使用:使用固定大小的内存空间
 */
// for循环-预先知道次数的迭代
function forLoop(n){
    let res = 0
    for(let i=1;i<=n;i++){
        res += i 
    }
    return res 
}
console.log('for',forLoop(5))
// while循环-迭代,与for循环不同,每轮会先检查条件,为真执行,否则结束循环
function whileLoop(n){
    let res = 0 
    let i = 1 
    while(i<=n){
        res += i
        i++ 
    }
    return res 
}
console.log('while',whileLoop(5))
/**
 * 递归
 * “自上而下”地解决问题
 * 比迭代更加耗费内存-函数执行的上下文数据都在内存中存储,直到函数返回才会释放
 * 比循环的时间效率更低
 * 实际应用中,递归的深度是有限的,过深的递归会导致栈溢出
 */
function recur(n){
    if(n === 1) return 1 
    const res = recur(n-1)
    return n + res 
}
console.log('recur',recur(5))
/**
 * 尾递归
 * 函数返回前的最后一个操作,意味着如果函数返回上一层后,无需继续执行其他操作,即无需保存上一层函数的上下文
 * 空间效率上与迭代相当
 */
function tailRecur(n,res){
    if(n === 0) return res 
    return tailRecur(n-1,res + n)
}
console.log('tailRecur',tailRecur(5,0))
/**
 * 斐波那契数列
 * f(1)=0,f(2)=1,f(n)=f(n-1)+f(n-2)
 */
function fib(n){
    if(n === 1) return 0 
    if(n === 2) return 1 
    return fib(n-1) + fib(n-2)
}
console.log('fib',fib(5))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
console 命令行工具 X clear

                    
>
console