Написать программу, которая по заданному натуральному числу N определяет значение функции - Pascal
Формулировка задачи:
Функция f(n) определена следующим образом:
f(0)=0, f(1)=1, f(2n)=f(n), f(2n+1)=f(n)+f(n+1).
Требуется написать программу, которая по заданному натуральному числу N определяет значение функции f(N).
Помогите пожалуйста , не могу разобраться!
Решение задачи: «Написать программу, которая по заданному натуральному числу N определяет значение функции»
textual
Листинг программы
function f(i:integer):integer; begin if i = 0 then f:=0 else if i = 1 then f:=1 else if i mod 2 = 0 then f:=f(i div 2) else f:=f(i div 2)+f(i div 2 + 1); end; var n:integer; begin Readln(n); Writeln(f(n)); end.
Объяснение кода листинга программы
- Объявляется функция
fс аргументомiтипаinteger, которая возвращает значение типаinteger. - Начинается блок выполнения функции
f. - Происходит проверка условия: если
iравно 0, то функция возвращает 0. - Иначе, если
iравно 1, то функция возвращает 1. - Иначе, если остаток от деления
iна 2 равен 0, то функция вызывает сама себя с аргументомiделенным на 2 и возвращает результат. - В противном случае, функция вызывает сама себя дважды: сначала с аргументом
iделенным на 2, затем с аргументомiделенным на 2 плюс 1, и возвращает сумму результатов. - Заканчивается блок выполнения функции
f. - Объявляется переменная
nтипаinteger. - Пользователю предлагается ввести значение для переменной
nс помощью функцииReadln. - Выводится результат вызова функции
fс аргументомnс помощью функцииWriteln.