Надо объяснить принцип работы этого кода словами. Это PascalABC
var n,i: integer;
function fact(n: integer): integer;
begin
if n = 1 then
fact:= 1
else
fact:=fact(n-1)*n;
end;
begin
for i:= 1 to 9 do
if i mod 2 = 1 then
writeln(fact(i));
end.
Ответы
Принцип работы программы заключается в вычислении факториала нечётных чисел на отрезке [1, 9].
Функция fact принимает один параметр - целое число n.
На выходе данная функция возвращает факториал n.
Рассмотрим работу функции:
Если n = 1, то функция без лишних вычислений возвращает 1, т.к факториал числа 1 = 1.
Иначе, если же параметр n не был равен 1, то мы умножаем n на рекурсивно вызываемую функцию fact, но уже от n - 1.
Т.е, если вызвать fact от числа 3, то произойдет следующее:
1) n = 3. n не равен 1, значит fact:=3 * fact(3 - 1); Факториал мы сейчас этот вычислить не можем, т.к не знаем, чему равен факториал от (n - 1), т.е fact(2)
2) Вызвали рекурсивно fact от n - 1, т.е fact(2); n = 2. n не равен 1, значит fact:=fact(2 - 1) * 2. Факториал мы сейчас этот вычислить не можем, т.к НА ЭТОМ ШАГЕ не знаем, чему равен факториал от (n - 1), т.е fact(1)
3) Вызвали рекурсивно fact от n - 1, т.е fact(1). n = 1, n == 1, значит fact:=1; И вот тут мы уже можем вычислять все факториалы из прошлых шагов.
Получаем:
2.1) fact(2) = 2 * fact(1) = 2 * 1 = 2;
1.1) fact(3) = 3 * fact(2) = 3 * 2 = 6.
Функция возвращает нам fact(n) и выходит из рекурсии.
Основная программа:
Пускаем цикл от 1 до 9 и если i у нас нечётное число, то печатаем факториал от i.
На выходе будет напечатано:
- 1 - fact(1), т.к 1 - нечетное число
- 6 - fact(3), т.к 3 - нечетное число
- 120 - fact(5), т.к 5 - нечетное число
- 5040 - fact(7), т.к 7 - нечетное число
- 362880 - fact(9), т.к 9 - нечетное число