Вот вопрос из предыдущего HackerEarthВызова -сумма абсолютной матрицы
Рой имеет матрицу размером NxN. Строки и столбцы нумеруются от 0 до N-1. j-я колонка i-й строки содержит абсолютную разницу между i и j. Другими словами, матрица [я] [J] = абс (Ij), где 0 ≤ I, J < N. Ваша задача состоит в том, чтобы найти сумму этой матрицы т.е.
sum = 0
for i=0 to N-1
for j=0 to N-1
sum += Matrix[i][j]
и вот мое решение эта проблема -
public static long getSum(int num, long acc) {
if (num == 1)
return acc;
long sum = 0;
for (int i = 0; i < num; i++) {
sum += i;
}
sum = sum * 2;
return getSum(num - 1, acc + sum);
}
Но эта функция не выполняется для большого числа, как сказать что-нибудь больше, чем 4500. Я получаю ошибку Stack Over Flow. Здесь я пытался две вещи, в основном, чтобы сохранить код, оптимизированный -
- использовать хвостовую рекурсию, и
- сохранить время работы этой функции порядка «п»
Так скажите, пожалуйста, Я правильно понял две вещи. Если да, то что еще я могу сделать для оптимизации этого кода. Спасибо за вашу помощь.
Это один приятный ответ! –
Спасибо, MBo за ваш ответ. Это было действительно полезно. –