【问题标题】:How to save the return value of a recursive function in a variable JavaScript如何将递归函数的返回值保存在变量 JavaScript 中
【发布时间】:2016-02-04 10:42:14
【问题描述】:

我需要将返回值存储在一个变量中。

我想知道如何修复此代码。我知道如果 b 的值为 3,我会得到 value=2,但如果函数进行多次迭代,我会变得不明。我读到我应该使用回调或其他东西,但我不知道如何,也解释了为什么我的代码不起作用以及我应该如何修复它。 (当然,此代码用于演示目的,就好像我会向您展示原始代码一样,它可能会让人感到困惑。)非常感谢!

var b = 70;

function myfunction() {
    b--;
    if (b < 3) {
        return b;
    } else {
        myfunction();
    }
}
value = myfunction();
console.log(value);

【问题讨论】:

标签: javascript recursion return return-value


【解决方案1】:

var b = 70;

function myfunction() {
    b--;
    if (b < 3) {
        return b;
    } else {
        myfunction();
        return b;
    }
}
value = myfunction();
console.log(value);

【讨论】:

    【解决方案2】:

    您的代码:myFunction() 将在第一次调用时返回 void/undefined,这不是递归方法。

    以下示例是递归方法。递归函数通常接收要处理的参数并返回最终值,该值冒泡(返回)到第一个调用者。

    function myfunction(b){
      b--;
      if(b<3) return b;
      else return myFunction(b);
    }
    

    当您调用递归函数时,您应该准备一个转义测试。否则你可能会陷入无限循环。

    无限递归示例

    function badFunction(){
    return badFunction();
    }
    // DON'T call badFunction()
    

    递归示例

    var b = 70;
    var safety = 1000;
    
    function myfunction(local_b) {
      if(safety<0) return;
      safety--;
    
      // main task
      local_b--;
      
      if (local_b < 3) {
        return local_b;
      }
    
      return myfunction(local_b);
    
    }
    var value = myfunction(b); // when b = 70, value = 2
    console.log(value);
    document.getElementById('value').innerHTML = value;
    &lt;span id="value"&gt;_&lt;/span&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 2013-10-10
      • 2016-11-23
      • 2017-09-24
      • 2015-08-16
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多