递归:函数中用调用函数自己,此时就是递归,递归一定要有结束条件
function f1() { console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:"); f1(); }; f1();//浏览器崩溃,因为没有结束条件——死循环 改进如下: var i=0; function f1() { i++; if (i<5){ f1(); } console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:"); }; f1();
小栗子:递归实现:求n个数字的和 n=5 ------->5+4+3+2+1
//for 循环写法: var sum=0; for (var i=0;i<=5;i++){ sum+=i; } console.log(sum);----------------------分割线--------------------------- function getsum(x) { if (x==1){ return 1 } return x+getsum(x-1); }; var sum1=getsum(5); console.log(sum1); console.log(getsum(10));
执行过程:
代码执行getsum(5)—>进入函数,此时的x是5,执行的是5+getsum(4),此时代码等待
此时5+getsum(4),代码先不进行计算,先执行getsum(4),进入函数,执行的是4+getsum(3),等待,先执行的是getsum(3),进入函数,执行3+getsum(2),等待,先执行getsum(2),进入函数,执行 2+getsum(1);等待,先执行getsum(1),执行的是x==1的判断,return 1,所以,
此时getsum(1)的结果是1,开始向外走出去
2+getsum(1) 此时的结果是:2+1
执行:
getsum(2)---->2+1
3+getsum(2) 此时的结果是3+2+1
4+getsum(3) 此时的结果是4+3+2+1
5+getsum(4) 此时的结果是5+4+3+2+1
结果:15
再来几个:
//递归案例:求一个数字各个位数上的数字的和: 123 --->6 ---1+2+3 //523 function geteverysum(x) { if(x<10){ return x; } //获取的是这个数字的个位数 return x%10+geteverysum(parseint(x/10)); } console.log(geteverysum(1364));//5
//递归案例:求斐波那契数列 function getfib(x) { if(x==1||x==2){ return 1 } return getfib(x-1)+getfib(x-2); } console.log(getfib(12));
【推荐学习:javascript高级教程】
以上就是javascript如何使用递归的详细内容。
