Итак, я реализую алгоритм умножения Карацубы в python. Прямо сейчас у меня бесконечная рекурсия и не могу понять. Есть идеи? При необходимости я предоставил больше кода.Алгоритм Карацубы в Python
def multiply(self, other):
# helper function
def split(largeInt, n):
least = largeInt._least_significant_digits(n/2)
most = largeInt._right_shift(n/2)
if debug: assert least.to_int() + (most.to_int() << (LargeInt.base_bits*(n/2))) == largeInt.to_int()
return least, most
n = max(len(str(self)),len(str(other)))
if (n==1):
return self.to_int() * other.to_int()
else:
aR, aL = split(self,n)
bR , bL = split(other, n)
x1 = aL.multiply(bL)
x2 =aR.multiply(bR)
a = aL.add(bL)
b = aR.add(bR)
x3=a.multiply(b)
# code for recursive step here
#return 1 # change this line with your implementation
return x1 * 10**n + (x3-x1-x2) * 10**(n/2) + x2
В коде есть комментарии, такие как «TODO: ваша реализация здесь» и «код для базового случая здесь». Он также имеет «возврат 2» непосредственно перед фактическим кодом Карацубы. Вы разместили здесь правильный код? –
этот код должен быть правильно отстроен. – deebee
Я вижу, вы ввели в код некоторые диагностические инструкции печати. Что они показывают? Какие значения передаются в 'multiply', когда вы углубляетесь в бесконечную рекурсию? Вы уверены, что методы большого числа, которые вы вызываете, делают то, что вы хотите? Является ли 'n/2', производящим целое число или float, и если последнее плохое? –