我有以下问题:
在一个小镇,人口是一年初的p0 = 1000
。人口每年定期增加2%,而且每年有50名新居民来到该镇。该镇需要多少年才能看到其人口大于或等于p = 1200
居民?
以下是我的代码:
function nbYear(p0, percent, aug, p) {
for (var i=0; p0 < p; i++){
p0 = p0 * (1 + percent/100) + aug;
return i
}
}
nbYear(1000, 2, 50, 1200)
我的解决方案返回0,这是错误的。正确的答案是3.我知道如果我删除了{}
,它会给我正确的答案。但我想了解我的代码有什么问题。为什么返回0?
您需要检查p0的值(增加的人口)并基于此返回i
。
function nbYear(p0, percent, aug, p) {
var i = 0;
while (true) {
if (p0 >= p) {return i;}
p0 = p0 * (1 + percent/100) + aug; i++;
}
}
nbYear(1000, 2, 50, 1200)
为了理解代码有什么问题,您需要了解return
语句和for
循环的工作原理。如果在没有任何条件的情况下在循环内返回i
的值,则无论如何都会执行return语句。因此,您的函数将始终返回i
的0
的初始值。