递归函数

1 篇文章 0 订阅

递归函数

  • 在函数内部自身调用自身的函数
  • 循环能做的所用事 递归都能做
  • 循环做不了的事 递归都能做

方法

  • 找临界值:无需计算,即可得出的值: ---- 退出递归的条件

  • 这一次和上一次运算的 关系 fn和fn-1 的关系

  • 假设当前递归函数可以运行,根据上一次调用自身的结果,写出这次运算的结果。 f(n) = f(n-1)+n => f(10)=f(9)+10

     // 例如
     function fn ( n ){
         if(n == 1 ){
             return  1 
         }
         return fn(n-1)+n 
     }    
     console.log(fn(3))
    
小测试
兔子繁殖问题:设有一对新生兔子,从第四个月开始他们每个月月初都生一对兔子,新生的兔子从第四个月月初开始又每个月生一对兔子,按此规律,并假定兔子没有死亡,n(n <= 20)个月月末共有多少对兔子?
function rabbits(n){ 
	if(n<=3) {
		return 1;
	}
	return rabbits(n-1)+rabbits(n-3)
}
console.log( rabbits(10) ) 
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?
// for循环模式
 var  sum = 1;
 for (var i = 1; i < 10; i++) {
	sum = (sum+1)*2;
 }
 console.log(sum)
 
 // 递归方式
 
function getTotal(n){  
	if (n==10) {
		return 1;
	}
	return (getTotal(n+1)+1)*2;
}

console.log(getTotal(1))

数组扁平化

  • 数组扁平化的指将一个多维数组变成一维数组

递归方式

    let arr = [1,[2,[3,[4,[5,6]]]]]
    function flatten (arr){
        var src = []
        arr.map( item => {
            if(Array.isArray(item)){
                src = src.concat(flatten(item))
            }else{
                src.push(item)
            }
        })
        return src
    }
    console.log(flatten(arr)) 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值