为什么我的python添加函数不适用于某些整数组合?

时间:2013-06-28 04:12:53

标签: python python-2.7

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

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

它将导致堆栈溢出,并使用

调用它

加(-1,4-)

由于

2 个答案:

答案 0 :(得分:4)

当a为负时,它永远递归的原因是在Python中,整数是任意精度。这意味着负数有效地在其前面具有无限数量的1位,并且它永远不会溢出。因此,你的算法永远保持携带,因为它永远不会到达两个0位的位置。

答案 1 :(得分:1)

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