递归算法学习

核心:

所谓的递归函数就是在函数体内调用本函数。

注意问题:

使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题

//递归算法测试 10的阶乘
function f(num){
    if(num<1){
        return 1;
    }else{
        return f(num-1)*num;
    }
}
console.log("10!的结果为:"+f(10));


某大公司的面试题之一


//请实现一个fibonacci函数,要求其参数和返回值如下所示:
/**
 *@desc: fibonacci
 *@param: count {Number}
 *@return: result {Number} 第count个fibonacci值,计数从0开始
 fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
 则getNthFibonacci(0)返回值为1
 则getNthFibonacci(4)返回值为5
 */
var getNthFibonacci = function (Num) {
    var count = parseInt(Num);
    if (isNaN(count) || count < 0)
        return 0;
    if (count <= 1)
        return 1;
    return getNthFibonacci(count-1) + getNthFibonacci(count-2);
};
//获取fibonacci数组的第 N 个值:索引从0开始
console.log(getNthFibonacci(4));
//从第一个开始打印fibonacci数列,长度是10
var arr = [];
for (let i=0 ; i<10; i++ ){
    arr.push(getNthFibonacci(i))
}
console.log("[ fibonacii length=10 ] = ",arr);

 某大公司的面试题之二

//一共10级楼梯,每次可以走一步或两步,求一共多少种走法。
//思路:
// 
// 要想走到N(N=10)级,可以分为2种情况。
// 
//     从n-2级迈两步
//     从n-1级迈一步
// 
// 那么对于n-2和n-1的情况也是各自分为两种,以此类推。
// 
// 那么走法的和就是n-2的走法和n-1的走法之和。
// 
// 那么递归到最基本的(当前人在第0阶台阶)
// 
// 第0阶台阶:0
// 
// 第1阶台阶:1
// 
// 第2阶台阶:2(1+1或者2)
// 
// 得到公式,也就是斐波那契数列。
var fib = function (n){
    if(n == 1){
        return 1;
    }else if(n==2){
        return 2;
    }else if(n>2){
        return fib(n-1) + fib(n-2);
    }
}
console.log(fib(10));

  某大公司的面试题之三

//1个细胞,一个小时分裂一次,生命周期是3小时,求n小时后容器内,有多少细胞。
// 思路:
//
// 细胞的生存周期是3个小时,那我们就可以把细胞在题目中状态分为以下几个状态:
//
//     a:刚分裂态——由前一小时的a,b,c分裂出
// b:分裂1小时态——由前一小时a长成
// c:分裂2小时态——由前一小时b长成
// d:分裂3小时态——死亡的细胞。由前一小时c长成,和之前的d一起组成。
//
// 那么,我们就可以根据细胞状态设定函数。分析每一个状态的来源是哪里即可。
//
// 容器中存活的细胞数目就是a、b、c三种状态数量的总和。
var afib = function (n){
    if(n===0){return 1;} //初始的那个细胞
    return afib(n-1)+bfib(n-1)+cfib(n-1);
}
var bfib = function(n){
    if(n===0){return 0;} //一个小时之后才会生成
    return afib(n-1);
}
var cfib = function(n){
    if(n===0||n===1){return 0;} //前两小时还没生成
    return bfib(n-1);
}

var time = 3;
console.log(afib(time)+bfib(time)+cfib(time));

总结:

递归的两个必要因素:

  1. 递归方程,即由需求抽象出来的一个,类似数学上的通用公式如fn(n) = fn(n-1) + fn(n-2)。
  2. 递归结束条件,即阻止递归方程无限的循环下去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1学习者1

打赏作者一杯咖啡与妹子坐坐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值