Вы должны сохранить последние три результата в трех переменных и применить формулу к ним. Ниже вы можете найти упрощенный пример, используя int
. Вы можете улучшить этот код с помощью BigInteger
, чтобы он работал и для больших чисел.
static int compute_iterative(int n) {
if (n == 0) return 1;
if (n == 1) return 3;
if (n == 2) return 5;
int a_n3 = 1;
int a_n2 = 3;
int a_n1 = 5;
int a_n = a_n1;
int i = 3;
while (i <= n) {
a_n = a_n1 * (int) Math.pow(a_n2, 2) * (int) Math.pow(a_n3, 3);
a_n3 = a_n2;
a_n2 = a_n1;
a_n1 = a_n;
i++;
}
return a_n;
}
Версия с использованием BigInterger
:
static BigInteger compute_iterative(int n) {
if (n < 0) {
throw new IllegalArgumentException("Unsupported input value: " + n);
}
final BigInteger[] values = { BigInteger.valueOf(1), BigInteger.valueOf(3), BigInteger.valueOf(5) };
if (n < values.length) {
return values[n];
}
int i = 3;
while (i <= n) {
final BigInteger result = values[2].multiply(values[1].pow(2)).multiply(values[0].pow(3));
values[0] = values[1];
values[1] = values[2];
values[2] = result;
i++;
}
return values[2];
}