解决RecursionError:获取对象的str时超出最大递归深度

时间:2019-08-19 06:10:43

标签: python recursion karatsuba

我没有发现我的代码有什么问题。我该如何解决Karatsuba乘法中的递归错误?

def karatsuba(x,y):
    if len(str(x))==1 or len(str(y))==1:
        return int(x)*int(y)
    else:
        n=max(len(str(x)),len(str(y)))
        nby2=n//2
        a=x/(10**nby2)
        b=x%(10**nby2)
        c=y/(10**nby2)
        d=y%(10**nby2)
        ac=karatsuba(a,c)
        bd=karatsuba(b,d)
        k=karatsuba(a+b,c+d)-ac-bd
        p=((10**2*nby2)*ac+((10**(nby2))*k)+bd)
        return p

错误消息-

line 11, in karatsuba
    ac=karatsuba(a,c)
  [Previous line repeated 989 more times]

 line 2, in karatsuba
    if len(str(x))==1 or len(str(y))==1:
RecursionError: maximum recursion depth exceeded while getting the str of an object

1 个答案:

答案 0 :(得分:0)

x/(10**nby2) 返回浮点数,所以它必须是 x//(10**nby2)。 同时将 (10**2*nby2) 更改为 (10**(2*nby2)

def karatsuba(x,y):
    if len(str(x))==1 or len(str(y))==1:
        return int(x)*int(y)
    else:
        n=max(len(str(x)),len(str(y)))
        nby2=n//2
        a=x//(10**nby2)
        b=x%(10**nby2)
        c=y//(10**nby2)
        d=y%(10**nby2)
        ac=karatsuba(a,c)
        bd=karatsuba(b,d)
        k=karatsuba(a+b,c+d)-ac-bd
        p=((10**(2*nby2))*ac+((10**(nby2))*k)+bd)
        return p