0

此代码使用位操作添加 2 个数字。

def add(a,b):
    if b == 0:
        return a
    sum = a ^ b
    carry = (a & b) << 1
    return add(sum, carry)

这将导致堆栈溢出调用它

添加(-1,4)

谢谢

4

2 回答 2

4

当 a 为负数时,这将永远递归的原因是在 Python 中,整数是任意精度的。这意味着一个负数实际上前面有无数个 1 位,并且它永远不会溢出。因此,您的算法将永远携带,因为它永远不会到达两个 0 位的位置。

于 2013-06-28T04:25:09.293 回答
1

发生这种情况是因为负数是用前导一而不是前导零写入的。特别是carry在每次迭代中变得更大(并且sum变得“负”更大)并且条件b == 0永远不会满足导致堆栈溢出(因为递归太深)。

于 2013-06-28T04:26:31.753 回答