![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, помогите составить алгоритм вычисления такой последовательности: 1+1/1!+2/2!+3/3!+n/n! . n вводится пользователем.
она должна быть рекурсивной или подобной, как этот алгоритм : Код:
function FacRecursive(n: Word): LongInt;
begin
if n > 1 then
Result := n * FacRecursive(n - 1)
else
Result := 1;
end; |
|
#2
|
||||
|
||||
|
Рекурсия - зло. : )
Если прям очень надо с рекурсией - то берется приведенный код и считается в цикле. Будет частично рекурсивная. А если стек совсем не жалко - можно и общую рекурсию сделать. Псевдокод: Код:
Res(n) = n/FacRecursive(n)+Res(n-1) з.ы. Чему людей учат? Рекурсия в рекурсии... Экстремальный кодинг наоборот: задача должна выполняться дольше определенного времени и пожирать все доступные процессу ресурсы. Последний раз редактировалось Bargest, 30.05.2012 в 19:50. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
old (30.05.2012)
| ||
|
#3
|
||||
|
||||
|
Рекурсия, конечно, дело красивое и хорошее, но, если задача не сводится к написанию функции для нахождения факториала, то лучше написать как-то так:
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
Var
Sum: Extended;
F: Int64;
i, n: Word;
begin
Write('N = ');
ReadLn(N);
F:=1;
Sum:=1;
For i:=1 To N Do
Begin
Sum:=Sum+1/F;
F:=F*i;
End;
WriteLn;
WriteLn('Sum = ', Sum:1:14);
WriteLn;
WriteLn('Press ENTER!');
ReadLn;
end. |
| Этот пользователь сказал Спасибо DelphiM0ZG за это полезное сообщение: | ||
old (30.05.2012)
| ||
|
#4
|
||||
|
||||
|
Разумеется, такое решение куда лучше. Но задание гласит: "использовать рекурсию". Следовательно, преподавателю оно не понравится.
З.Ы. DelphiM0ZG, дьявольская репутация. ![]() |
|
#5
|
||||
|
||||
|
Да, репутацию заметил! Просто, в другом месте увидел такую хорошую идейку - решил поделиться.
|