Будьте внимательны! Проект находится в тестовой эксплуатации!
Играй - Развивайся - Поступай в ТПУ
Информатика

Раздел: Информатика / 1. Информация и информационные процессы / 1.5. Логика и алгоритмы / 1.5.3. Индуктивное определение объектов

Вопрос №:  28047

На языке Pascal написаны следующие рекурсивные функции:

function g(x:integer): integer; forward;
function f(x: integer): integer;
begin
 if (x > 1)
 then f := x * g(x div 2)
 else f := 1;
end;

function g(x: integer): integer;
begin
 if (x > 2)
 then g := x * f(x div 3)
 else g := 2;
end;

Какое значение будет возвращено при выполнении вызова f(30)?

Впишите свой вариант ответа:

Рекурсивные вызовы будут отрабатывать следующим образом.

СПУСК
1. f(30). Условие выполняется, значит, возвращается результат 30*g(30 div 2).
2. g(15). Условие выполняется, значит, возвращается результат 15*f(15 div 3).
3. f(5). Условие выполняется, значит, возвращается результат 5*g(5 div 2).
4. g(2). Условие не выполняется, значит, возвращается результат 2.
 

ПОДЪЕМ
4. Возврат 2.
3. Вычисление 5*2. Возврат 10.
2. Вычисление 15*10. Возврат 150.
1. Вычисление 30*150. Возврат 4500.

Ответ: 4500