Как бы вы улучшили реализацию задачи?
Решая задачи по программированию, решил такую как "Трибоначчи". Трибоначчи, это как фибоначчи, только используются три последних чисел, т.е. 0, 0, 1, 1, 2, 4.
Мой алгоритм таков:
К результату для начала добавляем начальную сигнатуру (0, 0, 1) к результату. После чего, запоминаем сумму трех последних чисел результата (0 + 0 + 1 = 1). Далее, значению первого элемента последовательности последних трёх чисел присваиваем значение второго элемента. Значению второго элемента присваиваем значение третьего элемента. Значению третьего элемента присваиваем сумму трех последних чисел результата (т.е. 1), и так до конца.
Я бы хотел, чтобы вы улучшили мой следующий код и дали советы. Спасибо:
List<double> result = new();
var currentSequence = new double[3];
currentSequence = signature[0..3];
for (int i = 0; i < n; i++)
{
if (i < 3)
{
result.Add(signature[i]);
continue;
}
double nextNumber = currentSequence.Sum();
result.Add(nextNumber);
currentSequence[0] = currentSequence[1];
currentSequence[1] = currentSequence[2];
currentSequence[2] = nextNumber;
}
return result.ToArray();
Ответы (1 шт):
конкретно моя задача запросила целый ряд с длиной до значения N
Ну, тогда нет смысла держать два разных массива — вычисления имеет смысл проводить сразу в целевом массиве. Я C#, увы, не знаю, но на C++ это было бы примерно так:
int * result = new int [N+1]; // Кстати, почему у вас `double`? Если последовательность
// сугубо целочисленная...
result[0] = result[1] = 0;
result[2] = 1;
for(int i = 3; i <= N; ++i) result[i] = result[i-3] + result[i-2] + result[i-1];
Все, на выходе готовый массив со всеми числами трибоначчи, без каких-то лишних массивов и промежуточных вычислений. Думаю, что на С# будет выглядеть точно так же.