jS之递归

jS之递归及数组扁平化

简而言之,递归就是在函数内自己调用自己或者间接调用自己。

必要条件,递归必须要有出口,负责会造成栈溢出。(Uncaught RangeError: Maximum call stack size exceeded)

递归经典应用场景(斐波那契数列)

		//斐波那契数列
		//1,1,2,3,5,8,13,....
		//求第n位数?
		//根据已知数列可推导:
		//第一位f(1) = 1; 
		//第二位f(2) = 1;
		//第三位f(3) = f(3 - 1) + f(3 - 2);
		//第四位f(4) = f(4 - 1) + f(4 - 2);
		//第五位....
		//以此类推可得:f(n) = f(n -1) +f(n -2);
		function recursion(n){
			if(n === 1 || n === 2)return 1;//递归出口
		  return recursion(n - 1) + recursion(n - 2);
		}
		
		console.log(recursion(n));//输出第n位



数组扁平化

		//利用递归将多维数组扁平化
		var arr = [1,2,[3,4],[5,[6,7],[8],9],10,11];
		function flatFun(arr){
		  //定义一个新数组来保存扁平化后的数组
			var newArr = []; 
		   /**一个Map对象在迭代时会根据对象中元素的插入顺序来进行 一个一个  
		   * for...of 循环在每次迭代后会返回一个形式为[key,value]的数组
		   */
			arr.map(item => {
		    	//检测当前项是不是数组
				if(item && Array.isArray(item)){
		      	//如果是数组,通过递归调用重复以上步骤,并将最终递归返回的数组与新数组连接
					newArr = newArr.concat(flatFun(item))
				}else{
		      	//如果该项不是数组,直接push到新数组里面去
					newArr.push(item)
				}
			})
		  	//最后返回新数组
			return newArr;
		}
		console.log(flatFun(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值