zoukankan      html  css  js  c++  java
  • 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
     }
    }
    }
  • 相关阅读:
    hdu 2196(树上点分治)
    hdu 4807(网络流 + 贪心)
    hdu4101
    hdu4216
    hdu 4219, 树形概率DP
    hdu 4127 A*搜索
    hdu 4126
    hdu 5296,15年多校1-7
    poj3436 ACM Computer Factory
    Fence
  • 原文地址:https://www.cnblogs.com/lizhiwei8/p/11526377.html
Copyright © 2011-2022 走看看