1

我有这个代码:

 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;方程式获得水平数量的替代方法。

4

1 回答 1

2

您甚至可以对值进行二进制搜索以获得O(logN)算法而不是O(N),但是由于N是我认为不会超过 1000 的级别数,因此无需使代码复杂化. 你可以做同样的事情,但代码更短:

function getLevels($cEXP) {
    for($i = 1; ($i * $i + 2) * $i <= $cEXP; $i++);
    return $i - 1;
}

PS请注意,我摆脱了pow,尽量避免它继续只处理整数。

于 2013-03-22T20:15:08.830 回答