js递归实现方式
定义:
递归函数就是在函数体内调用本函数;
递归函数的使用要注意函数终止条件避免死循环;
递归实现形式:
1.声明一个具名函数,通过函数名调用
function f(a){ if(a<=1){ return 1 }else{ return a*f(a-1) } }
但是这样使用会因为 函数名 f 的变化而报错,
f = null f () // Uncaught TypeError: f is not a function
2. 使用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 fun fun (){ return fun(){ return fun(){ return 4 } } } // 可以参考这种形式,没有return fun fun (){ fun(){ fun(){ return 4 } } }
本文来自博客园,作者:东庄,转载请注明原文链接:https://www.cnblogs.com/lizhiwei8/p/11526377.html