Другие языки программирования и технологии

вычислить в TP f(n)=1!+2!+..n!

Turbo Pascal
[.
[Arty] ...
87
50 WMR
Константин Решетов
Константин Решетов
22 045
Лучший ответ
Доброго времени суток.

Вставлю и я свои пять копеек, если уж пошла речь об лучше. :-) Так вот, лучше вообще не использовать рекурсию в такой ситуации, если только не проходится сама тема рекурсии. Первое, при рекурсии активно сжирается стек. И второе, какой смысл в цикле до n перемножать n раз то, что уже перемножено?

Fact := 1;
S := 0;
for i:=1 to n do begin
Fact := Fact * n;
S := S + Fact;
end;

Удачи!
В предыдущем ответе (Панов Александр) есть ошибка: тип Integer для вычисления факториала лучше не использовать, потому что начиная с 8! будет переполнение, и результат программы будет неверен.

Для вычисления факториала и требуемой суммы, лучше использовать real.

Выглядит это примерно так:

program p1;
var i,m:integer;
s:real;

function fact(n:integer):real;
begin
if n=1 then fact:=1 else fact:=n*fact(n-1)
end;

begin
readln(m);
s:=0;
for i:=1 to m do s:=s+fact(i);
writeln(s);
end.

Удачи!
Sерcaн Оgutcu
7 235
program dsj;
Uses CRT;
Var m,s:Integer;

Function Fact(n:Integer):Integer;
Begin
if n=1 then Fact:=1 else
Fact:=n*Fact(n-1)
End;

Begin
Readln(m);
s:=0;
For i:=1 to m do s:=s+Fact(i);
End.

всего-то и делов! =)
причем это, пожалуй больше походит на паскаль-программу, чем предыдущая. Ни разу не встречал в паскале return, double...это уже С.
прояснение: просто устраиваем цикл, и каждый раз обращаемся к рекурсивной функции, которая считает факториал, для заданного числа и прибавляем к сумме=)
function fact (a: double): double
begin
if (a = 1) then return 1 else return fact(a-1) * a;
end;

var i, n: integer;
s: double;
begin
write ('n = '); readln (n);
s := 1;
for i := 2 to n do s := s + fact(i);
writeln (s);
end.

Похожие вопросы