该代码使用位操作添加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