此代码使用位操作添加2个数字。
def add(a,b):
if b == 0:
return a
sum = a ^ b
carry = (a & b) << 1
return add(sum, carry)
它将导致堆栈溢出,并使用
调用它加(-1,4-)
由于
答案 0 :(得分:4)
当a为负时,它永远递归的原因是在Python中,整数是任意精度。这意味着负数有效地在其前面具有无限数量的1位,并且它永远不会溢出。因此,你的算法永远保持携带,因为它永远不会到达两个0位的位置。
答案 1 :(得分:1)
这是因为负数用前导数而不是前导零写。特别是carry
在每次迭代中变成一个更大的数字(并且sum
变得“负”更大)并且条件b == 0
永远不会满足,导致堆栈溢出(因为递归太深)。