Поделитесь своими знаниями, ответьте на вопрос:
Последовательность чисел фибоначчи образуется так: первый и второй члены последовательности равны единице, каждый следующий член равен сумме двух предыдущих. (1, 1, 2, 3, 5, натуральное число n. n> =3. а)найти k-й член этой последовательности; б)для заданного n определить верно ли, что сумма первых n-членов последовательности есть четное число. , нужно составить программу для решения данных !
var
k : byte; arr : array of int64; function fn (c : byte) : int64; begin if arr[c - 1] < > 0 then begin fn : = arr[c - 1]; exit; end; if c < 3 then fn : = 1 else fn : = fn (c - 1) + fn (c - 2); arr[c - 1] : = result; end;
begin read (k); setlength (arr, k); writeln (fn (k)); end.
varn : byte; arr : array of int64;
tmp : int64; function fn (c : byte) : int64; begin if arr[c - 1] < > 0 then begin fn : = arr[c - 1]; exit; end; if c < 3 then fn : = 1 else fn : = fn (c - 1) + fn (c - 2); arr[c - 1] : = result; end;
begin read (n); setlength (arr, n); tmp : = (fn (n));
tmp : = 0;
for i : = 1 to n do
tmp : = (tmp + arr[i]) mod 2;
if tmp = 1 then writeln ('no') else writeln ('yes');
end.
это нисходящее динамическое программирование. в массиве arr храняится сами числа. рекурсивная функция fn (n) возвращает n-ое число. в б) мы сначала просчитываем n чисел (то есть считаем число n, так как для него нужны все предыдущие), а потом ищем их сумму. так как числа могут быть большими, то мы берем сразу их остаток от деления 2 во избежание преполнения.