递归函数是在一个函数通过名字调用自身的情况下构成的。
命名函数表达式在严格模式和非严格模式下都能用。命名函数表达式中的函数命名变量f只能在函数体内使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26一般情况
function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
使用arguments.callee,但不能用于严格模式
function factorial(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
命名函数表达式(函数名理解为一个变量名,再按变量的复制理解)
var factorial=(function f(num){
if(num<=1){
return 1;
}else{
return num*f(num-1);
}
})另一个递归的经典例子——汉诺塔
1
2
3
4
5
6
7function hanori(n,src,aux,dst){
if(n>0){
hanori(n-1,src,dst,aux);
console.log('Move '+n+' from '+src+' to '+dst);
hanori(n-1,aux,src,dst);
}
}
《JavaScript高级程序设计》读书笔记7.1递归

欢迎您扫一扫上面的微信二维码,订阅我的公众号!
- 本文链接: http://yoursite.com/2017/08/18/《JavaScript高级程序设计》读书笔记7-1递归/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!