我想尝试递归来计算复合兴趣而不是循环。
在Ruby中:
def compound balance, percentage
balance + percentage / 100 * balance
end
def invest amount, years, rate
return amount if years == 0
invest compound(amount, rate), years - 1, rate
end
这很好用。 1年后5万美元的10,000美元是10,500美元; 10年后,16,288美元。
现在JavaScript中的逻辑相同(ES6)。
function compound(balance, percentage) {
return balance + percentage / 100 * balance;
}
function invest(amount, years, rate) {
if (years === 0) {
return amount;
} else {
invest(compound(amount, 5), years - 1, rate);
}
}
这会返回undefined
,但我无法弄清楚原因。它使用正确的参数调用invest
正确的次数,逻辑是相同的。 compound
函数有效,我单独测试了它。那么......可能出现什么问题?
答案 0 :(得分:5)
如果逐步代码“脱落”函数的末尾,则Ruby函数会自动返回最后一个表达式的值。 JavaScript(以及大多数其他编程语言)不这样做,因此您需要明确地返回else
子句中的值:
function invest(amount, years, rate) {
if (years === 0) {
return amount;
} else {
return invest(compound(amount, 5), years - 1, rate);
}
}
或者使用条件运算符:
function invest(amount, years, rate) {
return years === 0 ? amount : invest(compound(amount, 5), years - 1, rate);
}