js递归

    技术2024-04-12  81

    递归函数就是在函数体内调用本函数;

    递归函数的使用要注意函数终止条件避免死循环;

    递归实现形式: 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 } } }

    Processed: 0.012, SQL: 9