Отказ от ответственности - это не, повторяю НЕ, что ваш профессор ищет, но ...
Если вы знаете, как решить recurrence relations, вы могли бы найти замкнутую форму из отношение для каждого значения K
и просто вычислить, что (нет цикла, без хранения промежуточных значений). Например, п-й Фибоначчи число может быть вычислена с помощью функции
long double fib_closed(unsigned int n)
{
long double sqrt_5 = sqrtl(5.0);
long double phi = (1 + sqrt_5)/2.0;
long double psi = (1 - sqrt_5)/2.0;
return floorl((powl(phi, n) - powl(psi, n))/sqrt_5);
}
В вашем случае, вы бы иметь различное рекуррентное соотношение для каждого K
(то есть, рекуррентное соотношение для N- 1 + N-2 + N-3 будет отличаться от рекуррентного отношения для N-1 + N-2 + N-3 + N-4 и т. Д.), Поэтому вам нужно будет написать столько функций, сколько значений K
вы хотите использовать:
switch(K)
{
case 3: return f_closed_3(n); break;
case 4: return f_closed_4(n); break;
...
}
, который, думая об этом, не собирается быть те крайне практично. Опять же, это не, что ваш профессор ищет, но это может сделать интересное упражнение в будущем.
Какие векторы? В C нет векторов ... Используйте цикл. –
@EugeneSh .: В контексте довольно ясно (по крайней мере для меня), что «вектор» используется как другое имя для массива. Большинство моих старых профессоров CS имели математические степени и использовали термин «вектор» для 1D-массивов в Fortran и C. В основном, заявление о проблеме запрещает использование массивов в качестве промежуточного хранилища. –
Это исключает любой массив или только массив для хранения полной последовательности? I.e., является рабочим массивом для допустимых значений «K»? – LutzL