复习递归和拷贝案例

   日期:2020-09-29     浏览:98    评论:0    
核心提示://递归就是函数自己调用自己 //递归的重要因子,递归的结束条件 function say(n){ if(n==0){return}//当n = 0 的时候递归结束 alert("你好") n--;//让n-- say(n); } say(5);//不用for循环求出1-3的和 function sum(n){ if(n==1){return 1}; return n + sum(n-1); } alert(sum
//递归就是函数自己调用自己
			//递归的重要因子,递归的结束条件
			function say(n){
				if(n==0){return}//当n = 0 的时候递归结束
				alert("你好")
				n--;//让n--
				say(n);
			}
			say(5);
//不用for循环求出1-3的和
			function sum(n){
				if(n==1){return 1};
				return n + sum(n-1);
			}
			alert(sum(3));
			//第一次 return 3+sum(2)
			//第二次 return 2+sum(1)
			//第三次 return 1
			//				3+2+1
//求一个斐波那契数列
			//1,1,2,3,5,8,13,21...
			//前面两个数是第三个数的和
			function getFib(n){
				if(n==1||n==2){return 1}
				else{
					return getFib(n-1)+getFib(n-2)
				}
			}
			
			getFib(30);
// 深拷贝
			var obj = {
				name:"mumu",
				age:18,
				arr:[2,4,6,8],
				job:{slary:150,time:8,workers:["zql","曾庆林"]},
				say(){alert(this.name)}
			}
			// 浅拷贝
			// var obj2  = Object.assign({},obj)
			//               浅拷贝对象(源,目标,目标2,。..)
			function deepCopy(obj){
				// 判断对象类型,如果是数组,如果是对象,要进行递归
				var type = typeof obj; 
				if(type=="object"){//引用类型对象
					var result ;					
					if(Array.isArray(obj)){ //如果是一个数组
						result= [];//声明result是一个数组
						for(var i=0;i<obj.length;i++){ //for循环遍历数组
							result[i] = deepCopy(obj[i]); //递归拷贝
						}
						
					}else{
						result = {};
						for( var k in obj){ //for in 遍历 
							result[k] = deepCopy(obj[k]) //递归拷贝
						}
					}
					return result;
				}else{// 值类型对象 直接返回					
					return obj; 
				}
			}
			var obj2 = deepCopy(obj);
			var obj5 = JSON.parse(JSON.stringify(obj))
			// json字符对象类型  Number  Boolean  String Array  Object  null
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服