Другие языки программирования и технологии
вычислить в TP f(n)=1!+2!+..n!
Turbo Pascal
50 WMR
Доброго времени суток.
Вставлю и я свои пять копеек, если уж пошла речь об лучше. :-) Так вот, лучше вообще не использовать рекурсию в такой ситуации, если только не проходится сама тема рекурсии. Первое, при рекурсии активно сжирается стек. И второе, какой смысл в цикле до n перемножать n раз то, что уже перемножено?
Fact := 1;
S := 0;
for i:=1 to n do begin
Fact := Fact * n;
S := S + Fact;
end;
Удачи!
Вставлю и я свои пять копеек, если уж пошла речь об лучше. :-) Так вот, лучше вообще не использовать рекурсию в такой ситуации, если только не проходится сама тема рекурсии. Первое, при рекурсии активно сжирается стек. И второе, какой смысл в цикле до 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.
Удачи!
Для вычисления факториала и требуемой суммы, лучше использовать 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.
Удачи!
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...это уже С.
прояснение: просто устраиваем цикл, и каждый раз обращаемся к рекурсивной функции, которая считает факториал, для заданного числа и прибавляем к сумме=)
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.
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.
Похожие вопросы
- Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
- написать программу на с++ (windows) и алгоритм для решения последовательности n! перестановок на множестве {1,2...n}
- Задача в паскале: реализовать рекурсивный алгоритм, печатающий все подмножества множества {1,2...N}
- Помогите составить блок схему. Данны целые числа n, k (n>=k>=0). Вычислить n(n-1)*(n-2)... (n-k-1)/k!
- Java: Вычислить приблеженое значение бесконечной сумы с епс=0.00001. ((-1)в степени(n+1) *x в степени n) /n +-λ
- Помогите написать программу Дано натуральное число n. Вычислить сумму всех k(k+1), k меняется от 1 до n.
- Решите задачу! Дано целое число n найдите сумму 1^n +2^n-1 + 3^n-2 ...+n^1
- информатика. вычислите факториал натурального числа n.
- Даны действительные числа а (1),а (2),...а (2n). Получить: а (1),а (2n),а (2),а (2n-1),а (3),...а (n),а (n+1).
- Вам даны все целые числа от 1 до N + 1, кроме одного. Найдите отсутствующее число.