FUNCTION F(X:integer):integer;
BEGIN
IF X<=1 THEN F:=X
ELSE IF ODD(X) THEN F:=F(5*X+1)+1
ELSE F:=F(X div 6)+1;
END
значение функции при х=46 будет 5
(нужно объяснить почему ,как работает функция)
заранее спасибо
FUNCTION F(X:integer):integer;
BEGIN
IF X<=1 THEN F:=X
ELSE IF ODD(X) THEN F:=F(5*X+1)+1
ELSE F:=F(X div 6)+1;
END
if x <= Y then f(x):=A
else
f(x):=g(f(x));
1:находим кол-во шагов (k), т.е.
k раз
____^___
/ \
считаем ,когда значение f[f(...f(f(x)] станет меньше или равно Y
2: вычисляем :
k раз
_____^___
/ \
результат = g[g(...g(g(A)]
function F(X)Когда условие выполняется рекурсия "заканчивается", т.е. более функция F(X) не вызывается и стековая память под ее аргументы не выделяется. При этом она начинает "обратный ход", т.е. как бы схлопываться с высвобождением памяти, выделенной под вызовы функции F(X).
begin
if условие then F:=A(X) {здесь нет рекурсивного вызова ф-ции F(X) в правой части присваивания}
else F:=H(F(G(X))); {здесь есть рекурсивный вызов}
end;
теперь тема закрыта