如何将递归函数的返回值保存在变量 JavaScript 中

Posted

技术标签:

【中文标题】如何将递归函数的返回值保存在变量 JavaScript 中【英文标题】:How to save the return value of a recursive function in a variable 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);

【问题讨论】:

else中使用return myfunction(); 非常感谢!请您解释一下这是如何工作的。 Understanding how recursive functions work 【参考方案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;

【讨论】:

以上是关于如何将递归函数的返回值保存在变量 JavaScript 中的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ext.Ajax.request请求 返回的值赋值给全局变量

Python进阶 —— 尾递归

数据结构与算法 —— 递归的效率问题以及递归与循环的比较

具有返回值的递归

shell函数

shell的函数