递归函数返回未定义

Posted

技术标签:

【中文标题】递归函数返回未定义【英文标题】: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 犯了同样的错误。找到您的问题后,我意识到我的代码发生了什么,并且我在错误的位置查找错误。出于这个原因,我为你投了赞成票。 【参考方案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 中是如何工作的让我感到困惑的是,我希望调用函数本身就足以实例化递归。例如;递增一个数字,然后调用该函数并将其传递回自身。不管怎样,这很有帮助,我只是好奇。

以上是关于递归函数返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

等待递归函数时获取未定义的结果

递归幂函数:如果没有初始返回值,为啥会这样?

无法读取未定义(递归函数)的属性“符号(Symbol.iterator)”

使用arguments属性的递归Javascript函数给出了正确的答案,但返回undefined

Python 函数进阶-递归函数

PHP递归函数返回值