Для решения задачи написана программа, в которую вставлены операторы вывода с целью трассировки.
// PascalABC.NET 3.1, сборка 1192 от 07.03.2016
function G(n:integer):integer; forward;
function F(n:integer):integer;
begin
Writeln('Вход в F(',n,')');
if n=1 then Result:=1
else Result:=F(n-1)-G(n-1);
Writeln('Выход из F(',n,') со значением ',Result)
end;
function G(n:integer):integer;
begin
Writeln('Вход в G(',n,')');
if n=1 then Result:=1
else Result:=F(n-1)+G(n-1);
Writeln('Выход из G(',n,') со значением ',Result)
end;
begin
Writeln('РЕЗУЛЬТАТ: ',F(5)/G(5))
end.
Результат выполнения программы (трассировочная таблица)
Вход в F(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из F(5) со значением -4
Вход в G(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из G(5) со значением -4
РЕЗУЛЬТАТ: 1
Вариант с хранением данных
// PascalABC.NET 3.1, сборка 1192 от 07.03.2016
var
RF,RG:array[-100..100] of integer;
function G(n:integer):integer; forward;
function F(n:integer):integer;
begin
Writeln('Вход в F(',n,')');
if RF[n]<>777 then Result:=RF[n]
else begin
if n=1 then Result:=1
else Result:=F(n-1)-G(n-1);
RF[n]:=Result
end;
Writeln('Выход из F(',n,') со значением ',Result)
end;
function G(n:integer):integer;
begin
Writeln('Вход в G(',n,')');
if RG[n]<>777 then Result:=RG[n]
else begin
if n=1 then Result:=1
else Result:=F(n-1)+G(n-1);
RG[n]:=Result
end;
Writeln('Выход из G(',n,') со значением ',Result)
end;
begin
for var i:=-100 to 100 do begin
RF[i]:=777; RG[i]:=777
end;
Writeln('РЕЗУЛЬТАТ: ',F(5)/G(5))
end.
Результат выполнения программы
Вход в F(5)
Вход в F(4)
Вход в F(3)
Вход в F(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из F(2) со значением 0
Вход в G(2)
Вход в F(1)
Выход из F(1) со значением 1
Вход в G(1)
Выход из G(1) со значением 1
Выход из G(2) со значением 2
Выход из F(3) со значением -2
Вход в G(3)
Вход в F(2)
Выход из F(2) со значением 0
Вход в G(2)
Выход из G(2) со значением 2
Выход из G(3) со значением 2
Выход из F(4) со значением -4
Вход в G(4)
Вход в F(3)
Выход из F(3) со значением -2
Вход в G(3)
Выход из G(3) со значением 2
Выход из G(4) со значением 0
Выход из F(5) со значением -4
Вход в G(5)
Вход в F(4)
Выход из F(4) со значением -4
Вход в G(4)
Выход из G(4) со значением 0
Выход из G(5) со значением -4
РЕЗУЛЬТАТ: 1