递归算法解读

递归的思想

“以此类推”是递归的基本思想

1. 具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。

2. 在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。

3. 解决问题的函数必须要有明显的结束条件,否则会出现无限递归的情况

// 斐波那契数列
function Fib(n) {
    console.log(n)
    if (n==0 || n==1){
        return n;
    }else {
        return Fib(n-1)+Fib(n-2);
              // Fib(3)
              // Fib(2)+Fib(1) ;
              // Fib(1) + Fib(0) ; 1
              // 1 ; 0 ; 1
              // final result : 1+0+1 = 2
    }
}
console.log('FinalResult:'+Fib(3));

// 递归排序
function Sort(arr) {
    if (arr.length<=1){
        return arr;
    }
    let n = parseInt(arr.length/2);
    let cur = arr.splice(n,1)[0];
    let left = [];
    let right = []
    for (let i = 0;i<arr.length;i++){
        if (arr[i]<cur){
            left.push(arr[i])
        }else {
            right.push(arr[i])
        }
    }
    return Sort(left).concat(cur,Sort(right))
    // Sort([1,7,4,6])
    // Sort([1]).concat(4,Sort([7,6]))
    // [1].concat(4,[].concat(6,Sort([7])))
    // [1].concact(4,[].concact(6,[7]))
    // 1,4,6,7
}

console.log('FinalResult:'+Sort([1,6,4,7]))


// 等差数列求和,递归实现
function Sum(n) {
    if (n>0){
        return n+Sum(n-1)
    }
    return 0;
    // 3+Sum(2)
    // 3+2+Sum(1)
    // 3+2+1+Sum(0)
    // 3+2+1+0
    // final result : 3+2+1+0 = 2
}
console.log('FinalResult:'+Sum(3))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值