為什么“code01”比“code02”更有效?在所有操作完成后,這兩個代碼似乎仍在獲得余數。
// code01
function power(base, exponent) {
if (exponent === 0) return 1;
const half = parseInt(exponent / 2);
const temp = power(base, half);
const result = (temp * temp) % 94906249;
if (exponent % 2 === 1) return (base * result) % 94906249;
else return result;
}
//code02
function power(base, exponent) {
if (exponent === 0) return 1;
return base * power(base, exponent - 1) % 94906249;
}
uj5u.com熱心網友回復:
第一個用于exponent / 2遞回,第二個用于exponent - 1.
重復除法為您提供對數運行時間,重復減法為您提供線性運行時間。
相比:
| 分配 | 減法 |
|---|---|
| 8 | 8 |
| 4 | 7 |
| 2 | 6 |
| 1 | 5 |
| . | 4 |
| 3 | |
| 2 | |
| 1 | |
| . |
因子為 2 的除法意味著輸入 8 為 4 步,輸入 16 為 5 步,輸入 ~1000 為 11 步。減 1 意味著輸入 1000 需要 1000 步。11 遠小于 1000。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362031.html
標籤:javascript 表现
