Ошибка: слишком большой уровень стека (SystemStackError) - PullRequest
0 голосов
/ 22 марта 2012

Я получаю эту ошибку:

integerMultiplication.rb:4:in `untMul': stack level too deep (SystemStackError)

в этом коде:

def untMul(x, y)
  xDigits = x.to_s.split(//).map{|chr| chr.to_i}
  yDigits = y.to_s.split(//).map{|chr| chr.to_i}
  n = xDigits.size
  a = xDigits[0, xDigits.size / 2]
  b = xDigits[xDigits.size / 2 ... xDigits.size]
  c = yDigits[0, yDigits.size / 2]
  d = yDigits[yDigits.size / 2 ... yDigits.size]
  ac = untMul(a,c)
  bd = untMul(b,d)
  adPlusBd = untMul(a + b, c + d) - ac - bd 
  return 10**n * ac + 10**n/2 * adPlusBd + bd
end

untMul(12, 54)

Может ли кто-нибудь помочь с пониманием, что здесь происходит не так? Я пытаюсь реализовать умножение Карацубы.

1 Ответ

1 голос
/ 22 марта 2012

Бесконечная рекурсия продолжается. untMul вызывает себя несколько раз, пока стеку не хватит места. Вам нужно установить условие условия, чтобы завершить его до того, как это произойдет.

...