初学者在这里。我大部分时间都在研究 Karatsuba 算法,只是因为我认为它会很有成效。我在这里看到过类似的问题,但它们是用其他语言编写的,而且看起来异常复杂。以下是我的代码。当它遇到对 ac 的递归调用时,它就一直在递归。就好像它从未达到基本情况一样。如果有人能提供一些关于哪里出了问题的见解,将不胜感激。对于此代码,您应该假设我乘以 2、base-10、四位数字。
def karatsuba(x, y):
if len(str(x)) == 1 or len(str(y)) == 1:
return (x * y)
else:
n = (max(len(str(x)), len(str(y))))
a = x / 10**(n / 2)
b = x % 10**(n / 2)
c = y / 10**(n / 2)
d = y % 10**(n / 2)
ac = karatsuba(a, c)
ad = karatsuba(a, d)
bc = karatsuba(b, c)
bd = karatsuba(b, d)
product = (10**n*(ac) + 10**(n/2)*(ad + bc) + bd)
return product
print (karatsuba(1234, 5678))