递归函数返回未定义
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)”