let power2 = (x,n) => {
if(n == 0) return 1;
let temp = power2(x,n/2);
if(n%2 == 1) return temp * temp * x;
return temp*temp;
}
console.log(power2(4,3));
該方法具有較少的節點和時間復雜度,但它給出了錯誤的輸出
uj5u.com熱心網友回復:
原始代碼的問題在于,當您需要將 n / 2 視為整數時,它會產生實數。按位運算總是對整數執行,因此 n >> 1 將正確產生一個整數。模數也是如此,它首先將數字轉換為整數,這就是它在您的代碼中正常作業的原因。
let power2 = (x, n) => {
if (n === 0) return 1;
const temp = power2(x, (n >> 1));
if (n % 2 === 1) return temp * temp * x;
return temp * temp;
}
console.log(power2(4, 3));
uj5u.com熱心網友回復:
如果您需要基于遞回的自定義整數冪函式,請考慮以下代碼段:
// Custom pow
const myPow = (n, i) => i > 0 ? myPow(n, i - 1) * n : 1;
// Test
console.log(myPow(4, 3));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513460.html
標籤:javascript递归
下一篇:我終于理解了遞回還是我錯了?
