提问人:raam86 提问时间:10/5/2012 最后编辑:VLAZraam86 更新时间:2/7/2022 访问量:15163
递归函数返回 undefined
Recursive function returns undefined
问:
我有一个计算税收的函数。
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;
}
}
我不明白为什么它不停止递归。
答:
18赞
dsh
10/5/2012
#1
您的递归存在一个错误:
taxes(tax, newSalary);
当条件的计算结果为 true 时,不会返回任何内容。您需要将其更改为:if
return taxes(tax, newSalary);
您在 中有必要的语句。return
else
评论
2赞
artomason
3/25/2019
这很有帮助,但我有兴趣知道为什么递归需要正确运行。return
4赞
dsh
3/26/2019
如果希望函数返回一个值,则必须返回一个值。在 javascript 中,没有 a 的函数将返回 .递归本身不需要返回(例如:打印出树中的节点),但如果你想让函数返回一些东西,那么它需要 .可以通过在调试器中逐步执行函数来探索这一点。return
undefined
return
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);
}
您没有从函数或设置返回值。当您不返回任何内容时,返回值为 。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);
}
0赞
nikolozz
2/7/2022
#3
例如退货taxes(tax, newSalary);
100
;
taxes(tax, newSalary); // undefined
你希望看到,因为你是递归调用的,但实际上你得到了值(),你需要返回这个值。100
taxes(tax, newSalary)
100
return taxes(tax, newSalary); // 100
// simply it's the same as
// return 100
// because taxes(tax, newSalary) returned 100
之后,您将获得此值。return 100
评论