GCD из двух многочленов

#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() продолжает вызывать себя без каких-либо ограничений!