Вычислить значение выражения, используя рекурсивную подпрограмму - Pascal
Формулировка задачи:
Составить программу, которая, используя рекурсивную функцию или процедуру,
находит значение данной функции для любых целых неотрицательных аргументов:
F(n,m) = (n/2), если n-четно,
m, если n=1,
F((n+1)/2), m+1) в остальных случаях.
Решение задачи: «Вычислить значение выражения, используя рекурсивную подпрограмму»
textual
Листинг программы
function f(n, m: integer): integer;
begin
if odd(n) then f := f((n + 1) div 2, m + 1) else f := n div 2
end;
var n, m: integer;
begin
write('n = ');
readln(n);
write('m = ');
readln(m);
if (n < 0) or (m < 0)
then write('Function is undefined')
else write('F(n, m) = ', F(n, m));
readln
end.
Объяснение кода листинга программы
- Создаётся функция с именем f, которая принимает два аргумента n и m типа integer.
- Внутри функции проверяется, является ли число n нечётным. Если да, то вызывается рекурсивная подпрограмма f с аргументами (n + 1) / 2 и m + 1. Если нет, то результат вычисляется как n / 2.
- В переменной n хранится вводимое пользователем число, а в переменной m - другое вводимое пользователем число.
- Выводится сообщение с запросом ввести значения n и m.
- Проверяется, не являются ли значения n и m отрицательными. Если хотя бы одно из них отрицательное, выводится сообщение о том, что функция не определена.
- Иначе выводится результат вызова функции f(n, m).