js.return&递归

版权声明:欢迎阅读,有误请指正,转载请申明。 https://blog.csdn.net/wx1995sss/article/details/87256943
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>return关键字</title>
		<!--return返回函数结果,可选是否添加;
		注意事项:
		1、return只能出现在函数体内
		2、函数在执行过程中,只要执行return语句就会停止继续执行函数体
		3、在函数体内可以存在多个return语句,但只执行一个
		4、return后可以不接变量或者表达式,直接停止函数执行
		5、return只能返回一个返回值
		6、return的返回值可以为任意数据类型
		7、如果函数没有返回值,那么这个函数的值会自动赋值为undefined-->
		<script>
//			function myfun(){//7,示例
//				return;
//			}
//		alert(myfun());//undefined
//		arguments对象:
//		每创建一个函数,该函数就会隐式创建一个arguments对象,
//		它包含有实参的信息,arguments只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数
//		arguments对象是用来访问函数的参数的,通过它,开发者无需明确指出参数的名称就能直接访问他们
//		function myFun2(){
//			return arguments.length;
//		}
//		console.log(myFun2('a','b'));//2
		//根据arguments对象的长度不同,可以执行不同的代码块
		//传参过程中,如果实参对形参有遗漏,那么遗漏的参数会以undefined的形式传给函数
//		递归:函数中又调用函数本身,称为递归
//		递归算法:是将问题转化为规模缩小的同类问题的子问题,每个子问题都用一个同样的算法去解决,一般来说,
//		一个递归算法就是函数用自身去解决他的子问题
//		递归算法的特点:
//		1.在函数过程中调用自身
//		2.在递归过程中,必须要有一个明确的条件判断递归的结束,即递归出口
//		3.递归算法简洁,但是效率低,通常不作为推荐算法
//		递归缺点:如果递归函数的终止条件不明确或者缺少终止条件会导致函数长时间运行,使用户界面处于假死状态
//		arguments.calle()对函数本身的调用
//1.效率:递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间;
//
//2.效率:递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算;
//
//3.性能:调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次过多时,就会超出栈的容量,从而导致栈溢出。
//		var sum = function(n){
//			if(n<=1)
//			return 1;
//			return n*arguments.callee(n-1);
//		}
//		console.log(sum(5));
//		var sum1 = function(a){ 
//			if(a==1)
//			return 1;
//			return a+arguments.callee(a-1);
//		}
//		console.log(sum1(100));

//		1.多维数组的遍历
//		2.斐波那契数列
//		3.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。
//		这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
//		4.杨辉三角
//		var a = [1,2,[3,4,5,[11,12]],6,7,[8,9],10];
//		function myfun1(n){
//			for(var i in n){
//				if(Array.isArray(n[i])==true){
//					arguments.callee(n[i]);
//				}else if(n.hasOwnProperty(i))//hasOwnProperty()判断是否是自身属性,而不是继承得到的
//				{console.log(n[i]);}
//			}
//		}
//		myfun1(a);//这里不能打印,打印函数,函数为undefined
//		多维数组降维
				var arr01 = [1,2,[2,4]];
				var arr02 =[];
				function arrApply(arr){
					for(var i in arr){
						if(Array.isArray(arr[i])){
							arguments.callee(arr[i]);
						}else if(arr.hasOwnProperty(i)){
							arr02.push(arr[i]);
						}
					}
				}
				arrApply(arr01);
				console.log(arr02);// [1, 2, 2, 4]
				
//		function fun2(n){
//			if(n<0)
//			{return "请输入正整数";}
//			else if(n == 0||n==1){
//				return 1;
//			}else{
//				return arguments.callee(n-1)+arguments.callee(n-2);
//			}
//		}
//		console.log(fun2(10));
//		var i =2;
//		function fun3(n){
//			if(n==0){
//				console.log("他出发时赶了"+i+"只鸭子");
//			}else{
//				i = (i+1)*2;
//				var a =i/2+1;
//				console.log("他经过第"+n+"个村子,卖出"+a+"只鸭子");
//				return arguments.callee(n-1);
//			}
//		}
//		fun3(7);
		function fun41(x,y){
			if(y == 0) return 1;  //每行第一个数为1
			else if(x == y) return 1; //最后一个数为1
			//其余都是相加而来 
			else return arguments.callee(x-1,y-1)+arguments.callee(x-1,y);
		}
		function fun42(n){   //杨辉三角,N为行数 
			for( var i = 0 ; i < n ; i++ ){   //一共N行
				for ( var j = 0 ; j <= i ; j++ ) {  //每行数字的个数即为行号、例如第1行有1个数、第2行有2个数
					document.write(fun41(i,j)+"  ");
				}
				document.write("<br/>");
			}
		}
		fun42(10);
		</script>
	</head>
	<body>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/wx1995sss/article/details/87256943