• Предмет: Информатика
  • Автор: hikolaevcawa
  • Вопрос задан 4 месяца назад

30 БАЛЛОВ ДАЮ
Вычислите факториал через рекурсию на языке Паскаль с написанием всех действий

Ответы

Ответ дал: MrSolution
1

Функция на PascalABC.NET:

function Integer.Factorial(): Integer;

begin

 var newNumber:= self - 1;

 if self <= 1 then Factorial:= 1

 else Factorial:= self * newNumber.Factorial;

end;

Пример использования:

##

var a: Integer := 5;

('a!=' + a.Factorial).Print;

Вывод на экран:

a!=120


hikolaevcawa: Спасибо, но мне надо:
hikolaevcawa: Спасибо но мне надо var
result : QWord;
x : integer;

function Factorial(n : integer) : QWord;
begin
if (n = 0) or (n = 1) then
Factorial := 1
else
Factorial := Factorial(n - 1) * n;
end;

begin
writeln('Рекурсивное вычисление факториала');
write('x = ');
readln(x);
result := Factorial(x);
writeln(x, '!', ' = ', result);
readln;
end. и чтоб оно еще выводило все действия по типу ввожу 4 а выодит 4*3+3*2... ответ 24
MrSolution: Не понятно, что такое 4*3+3*2... Факториал - это 1*2*3*4*...*n=n!
MrSolution: Написать можно так:
##
function Integer.Factorial(): Integer;
begin
var newNumber:= self - 1;
if self <= 1 then begin
('1 =').Print;
Factorial:= 1
end
else begin
Console.Write(self + '*');
Factorial:= self * newNumber.Factorial;
end
end;

var a: Integer := 5;
(a + '! =').Print;
(a.Factorial).Print;
MrSolution: Выведет 5! = 5*4*3*2*1 = 120
MrSolution: Но сразу замечу, что делать вывод внутри функции, которая вычисляет значение - это ОЧЕНЬ плохо!
MrSolution: Лучше сделать вывод вот так:
'a! ='.Print;
(1..a).Print('*');
(' = ' + a.Factorial).Print;
MrSolution: Будет a! = 1*2*3*4*5 = 120
Вас заинтересует