定义:
递归函数就是在函数体内调用本函数;
递归函数的使用要注意函数终止条件避免死循环;
递归实现形式:
1.声明一个具名函数,通过函数名调用
function f(a){if(a<=1){return 1}else{return a*f(a-1)}}
但是这样使用会因为 函数名 f 的变化而报错,
f = nullf () // Uncaught TypeError: f is not a function
- 使用arguments.callee代替函数名
在严格模式下不支持使用arguments.callee
3.使用函数表达式
var fun = (function f(a){if(a<=1){return 1}else{return a*f(a-1)}})// 或:var f = function (a){if(a<=1){return 1}else{return a*f(a-1)}}var fun = f;
递归返回值
1.递归函数相当于一种循环调用,需要避免死循环,给定一个条件停止调用
2.递归函数的返回值要返回整个函
在 * 处要返回整个函数,// 返回公约数的数组集合let fun = (function f(a,n = 1,b=[]){if(a%n === 0) {b.push(n)}n ++;if(n>a){return b}return f(a,n,b) // *** 要返回整个函数,不能只是return b})调用函数fun(4)[1, 2, 4]
这是因为当执行条件 n>a 不成立时是没有返回值的,例如,第一次执行时 n=1,a=4,1>4 为false因而没有返回值,接着之后的值也都没有返回// 可以参考这种形式,有return funfun (){return fun(){return fun(){return 4}}}// 可以参考这种形式,没有return funfun (){fun(){fun(){return 4}}}
