Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.05.2012, 19:34
old old вне форума
Прохожий
 
Регистрация: 18.04.2012
Сообщения: 1
Репутация: 10
Стрелка вычисление последовательности 1+1/1!+2/2!+n/n!

Здравствуйте, помогите составить алгоритм вычисления такой последовательности: 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  
Старый 30.05.2012, 19:46
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Рекурсия - зло. : )
Если прям очень надо с рекурсией - то берется приведенный код и считается в цикле. Будет частично рекурсивная.
А если стек совсем не жалко - можно и общую рекурсию сделать.
Псевдокод:
Код:
Res(n) = n/FacRecursive(n)+Res(n-1)
При n = 0 Res возвращает единицу.

з.ы. Чему людей учат? Рекурсия в рекурсии... Экстремальный кодинг наоборот: задача должна выполняться дольше определенного времени и пожирать все доступные процессу ресурсы.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 30.05.2012 в 19:50.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
old (30.05.2012)
  #3  
Старый 30.05.2012, 20:00
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

Рекурсия, конечно, дело красивое и хорошее, но, если задача не сводится к написанию функции для нахождения факториала, то лучше написать как-то так:

Код:
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  
Старый 30.05.2012, 20:05
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Разумеется, такое решение куда лучше. Но задание гласит: "использовать рекурсию". Следовательно, преподавателю оно не понравится.

З.Ы. DelphiM0ZG, дьявольская репутация.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 30.05.2012, 20:23
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

Да, репутацию заметил! Просто, в другом месте увидел такую хорошую идейку - решил поделиться.
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:27.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025