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

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

Вопрос №:  28201

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

function g(x:integer): integer; forward;
function f(x: integer): integer;
begin
 if (x < 100)
 then if (x mod 2 = 0) then f := (g(x + 5) - 3) else f := (f(x + 11) - 5)
 else f := 1;
end;

function g(x: integer): integer;
begin
 if (x < 70)
 then if (x mod 3 = 0) then g := (f(x * 2) div 2) else g := (g(x * 3) div 3)
 else g := 200;
end;

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

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

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

СПУСК
1. f(2). Оба условия выполняются, значит, возвращается результат g(2+5)-3.
2. g(7). Условие1 выполняется, условие2 - нет, значит, возвращается результат g(7*3) div 3.
3. g(21). Оба условия выполняются, значит, возвращается результат f(21*2) div 2.
4. f(42). Оба условия выполняются, значит, возвращается результат g(42+5)-3.
5. g(47). Условие1 выполняется, условие2 - нет, значит, возвращается результат g(47*3) div 3.
6. g(141). Условие1 не выполняется, значит, возвращается результат 200.

ПОДЪЕМ
6. Возврат 200.
5. Вычисление 200 div 3. Возврат 66.
4. Вычисление 66-3. Возврат 63.
3. Вычисление 63 div 2. Возврат 31.
2. Вычисление 31 div 3. Возврат 10.
1. Вычисление 10-3. Возврат 7.

Ответ: 7