該代碼使用位操作添加2個數字。爲什麼我的python add函數不適用於某些整數組合?
def add(a,b):
if b == 0:
return a
sum = a^b
carry = (a & b) << 1
return add(sum, carry)
這將導致堆棧溢出與
插件調用它(1,4)
感謝
該代碼使用位操作添加2個數字。爲什麼我的python add函數不適用於某些整數組合?
def add(a,b):
if b == 0:
return a
sum = a^b
carry = (a & b) << 1
return add(sum, carry)
這將導致堆棧溢出與
插件調用它(1,4)
感謝
發生這種情況是因爲負數是用前導零寫的,而不是前導零。特別是carry
在每次迭代中變得更大(並且sum
變得「負」變大)並且條件b == 0
永遠不會被滿足導致堆棧溢出(因爲遞歸太深)。
您是否嘗試過使用調試器?每次你遞歸調用'add()'時,'a'是一個更負數,'b'是更正數。由於Python中的整數在需要時會自動提升爲任意長度的整數,因此永遠不會停止執行。如果它沒有推廣到任意長度的整數,我認爲它會停止執行,就像你預期溢出一樣。 – Patashu