#java
#java
Вопрос:
В приведенном ниже коде я хочу найти наибольший общий делитель 2 многочленов. Иногда я получаю сообщение об ошибке «return c.plus( (a.minus(b.times(c)).divides(b)) );». Как я могу это исправить?
public Polynomial divides(Polynomial b) {
Polynomial a = this;
if ((b.deg == 0) amp;amp; (b.coef[0] == 0))
throw new RuntimeException("Divide by zero polynomial");
if (a.deg < b.deg) return new Polynomial(0,0);
int coefficient = a.coef[a.deg]/(b.coef[b.deg]);
int exponent = a.deg - b.deg;
Polynomial c = new Polynomial(coefficient, exponent);
return c.plus( (a.minus(b.times(c)).divides(b)) );
}
public Polynomial GCD(Polynomial b) {
Polynomial a = this;
Polynomial f = b;
Polynomial x = a.minus((a.divides(f)).times(f));
if (x.deg == 0 amp;amp; x.coef[0] == 0) {
return b;
}
return f.GCD(x);
}
Комментарии:
1. Какую ошибку вы получаете?
2. Исключение в потоке «main» java.lang. Ошибка StackOverflowError
Ответ №1:
Это исключение во время выполнения означает: вы создали бесконечную рекурсию.
Скорее всего, потому что ваш метод divides() вызывает себя в этой последней строке — без надлежащей проверки, чтобы избежать этой рекурсии.
Другими словами: вы хотите просмотреть свою математику и логику там, чтобы просто избежать того, что divides() продолжает вызывать себя без каких-либо ограничений!