递归
一、概念:函数中调用函数自己,但是一定要有结束的条件
<script> var i=0; function f1(){ i++; if(i<5){ f1(); } console.log("哈哈"); } f1();//输出5次哈哈 </script>
二、案例
<!-- 递归实现:求n个数字的和 --> <script> function getSum(n){ if(n==1){ return 1; } return n+getSum(n-1); } console.log(getSum(5));//15 //执行过程: //1.代码执行getSum(5)---->进入函数,此时执行的n=5.执行5+getSum(4),此时代码等待,先不进行计算 //2.执行getSum(4)----->进入函数,执行n=4,执行4+getSum(3),此时代码等待,先不进行计算 //3.执行getSum(3)------>进入函数,执行n=3,执行3+getSum(2),此时代码等待,先不进行计算 //4.执行getSum(2)------>进入函数,执行n=2,执行2+getSum(1),此时代码等待,先不进行计算 //5.执行getSum(1)------>进入函数,执行n=1,返回结果是1,所以getSum(1)=1; //6.往回走:2+getSum(1)------>2+1; //7.往回走:3+getSum(2)------>3+2+1; //8.往回走:4+getSum(3)------>4+3+2+1; //9.往回走:5+getSum(4)------>5+4+3+2+1--->得出结果等于15 //10.结束输出结果15 </script>
<!-- 递归案例:求一个数字各个位数上的和 --> <script> function getEverySum(n){ if(n<10){ return n; } return n%10+getEverySum(parseInt(n/10)); } console.log(getEverySum(1265));//14 </script>
<!-- 递归案例:求斐波那契数列 --> <script> function getFib(n){ if(n==1||n==2){ return 1; } return getFib(n-1)+getFib(n-2); } console.log(getFib(10));//55 </script>
三、应用:(后面文章介绍)
- 深拷贝
- 遍历DOM树
【转载文章务必保留出处和署名,谢谢!】