我有这段代码:
function getLevels($cEXP) { // $cEXP is current player experience
$i = 1;
while(!$n) {
$NextLevelXP = pow($i,3) + 2 * $i;
if($NextLevelXP > $cEXP) {
$AllLevels = $i;
break;
}
$i++;
}
}
我需要知道的是关于优化可能性,或者通过$NextLevelXP = pow($CurrentLevel,3) + 2 * $CurrentLevel;
等式获得水平数量的替代方案。
答案 0 :(得分:2)
您甚至可以对值进行二元搜索以获得 O(logN)算法,而不是 O(N),但是 N 是我认为不会超过1000的级别数,不需要使代码复杂化。您可以使用更多短代码执行相同操作:
function getLevels($cEXP) {
for($i = 1; ($i * $i + 2) * $i <= $cEXP; $i++);
return $i - 1;
}
P.S。请注意,我摆脱了pow
,尽量避免它只处理整数。