【问题标题】:Recursive function returns undefined递归函数返回未定义
【发布时间】:2012-09-26 02:54:15
【问题描述】:

我有一个计算税金的函数。

function taxes(tax, taxWage) 
{
    var minWage = firstTier; //defined as a global variable
    if (taxWage > minWage) 
    {
        //calculates tax recursively calling two other functions difference() and taxStep() 
        tax = tax + difference(taxWage) * taxStep(taxWage);
        var newSalary = taxWage - difference(taxWage);
        taxes(tax, newSalary); 
    }
    else 
    {
        returnTax = tax + taxWage * taxStep(taxWage);
        return returnTax;
    }
} 

我不明白为什么它不停止递归。

【问题讨论】:

  • 您的问题是什么?而且,这段代码与您的问题标题有什么关系?
  • 你说它是递归的,但这里没有递归的代码。
  • @raam86 但很可能该代码有问题......
  • @raam86 是的,就像怀疑一样。
  • @raam86 我对我的代码 ffs 犯了同样的错误。找到您的问题后,我意识到我的代码发生了什么,并且我在错误的位置查找错误。出于这个原因,我为你投了赞成票。

标签: javascript recursion return


【解决方案1】:

在你的职能部门:

if (taxWage > minWage) {
    // calculates tax recursively calling two other functions difference() and taxStep() 
    tax = tax + difference(taxWage) * taxStep(taxWage);
    var newSalary = taxWage - difference(taxWage);
    taxes(tax, newSalary); 
}

您没有从函数返回值或设置returnTax。什么都不返回时,返回值为undefined

也许,你想要这个:

if (taxWage > minWage) {
    // calculates tax recursively calling two other functions difference() and taxStep() 
    tax = tax + difference(taxWage) * taxStep(taxWage);
    var newSalary = taxWage - difference(taxWage);
    return taxes(tax, newSalary); 
}

【讨论】:

    【解决方案2】:

    您的递归存在错误:

    taxes(tax, newSalary);
    

    if 中的条件评估为真时,您不会返回任何内容。您需要将其更改为:

    return taxes(tax, newSalary);
    

    else 中有必要的 return 语句。

    【讨论】:

    • 这有帮助,但我很想知道为什么return 是递归正常运行所必需的。
    • 如果你想让你的函数返回一个值,那么你必须返回一个值。在 javascript 中,没有return 的函数将返回undefined。递归本身不需要返回(例如:打印出树中的节点),但如果您希望函数返回某些内容,那么它需要return。您可以通过在调试器中单步执行该函数来探索这一点。
    • 我认为它在 JavaScript 中是如何工作的让我感到困惑的是,我希望调用函数本身就足以实例化递归。例如;递增一个数字,然后调用该函数并将其传递回自身。不管怎样,这很有帮助,我只是好奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多