递归函数返回 undefined

Recursive function returns undefined

提问人:raam86 提问时间:10/5/2012 最后编辑:VLAZraam86 更新时间:2/7/2022 访问量:15163

问:

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

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;
    }
} 

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

JavaScript 递归 返回

评论

0赞 jfriend00 10/5/2012
你的问题是什么?而且,这段代码与你的问题标题有什么关系?
0赞 Lee Taylor 10/5/2012
你说它是递归的,但这里没有递归的代码。
0赞 Lee Taylor 10/5/2012
@raam86 但很可能是该代码有问题......
0赞 Lee Taylor 10/5/2012
@raam86 是的,正如怀疑的那样。
1赞 vlad_o 7/22/2015
@raam86 我对我的代码 ffs 犯了同样的错误。在我找到你的问题后,我意识到我的代码是怎么回事,而且我在错误的地方寻找错误。出于这个原因,我给你投了赞成票。

答:

18赞 dsh 10/5/2012 #1

您的递归存在一个错误:

taxes(tax, newSalary);

当条件的计算结果为 true 时,不会返回任何内容。您需要将其更改为:if

return taxes(tax, newSalary);

您在 中有必要的语句。returnelse

评论

2赞 artomason 3/25/2019
这很有帮助,但我有兴趣知道为什么递归需要正确运行。return
4赞 dsh 3/26/2019
如果希望函数返回一个值,则必须返回一个值。在 javascript 中,没有 a 的函数将返回 .递归本身不需要返回(例如:打印出树中的节点),但如果你想让函数返回一些东西,那么它需要 .可以通过在调试器中逐步执行函数来探索这一点。returnundefinedreturn
0赞 artomason 3/26/2019
我认为让我对它在 JavaScript 中的工作方式感到困惑的是,我期望调用函数本身足以实例化递归。例如;递增一个数字,然后调用函数并将其传递回自身。无论哪种方式,这都很有帮助,我只是好奇。
44赞 jfriend00 10/5/2012 #2

在您的职能部门中:

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); 
}

您没有从函数或设置返回值。当您不返回任何内容时,返回值为 。returnTaxundefined

也许,你想要这个:

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); 
}
0赞 nikolozz 2/7/2022 #3

例如退货taxes(tax, newSalary);100;

taxes(tax, newSalary); // undefined

你希望看到,因为你是递归调用的,但实际上你得到了值(),你需要返回这个值。100taxes(tax, newSalary)100

return taxes(tax, newSalary); // 100
// simply it's the same as
// return 100
// because taxes(tax, newSalary) returned 100

之后,您将获得此值。return 100