Вычислить сумму элементов рекурсии: s=a1+a2++an где an=n! /(2^n)!

lanv lanv    3   10.08.2019 03:20    0

Ответы
polsedegova polsedegova  04.10.2020 08:31
Из-за дурацкого сбоя этого сервиса при сохранении ответа пропал получасовой набор формул в модераторов удалить этот ответ.

P.S. Набираешь ответ - как по минному полю идешь. При нажатии "сохранить" неизвестно что произойти может. Например, при случайном нажатии "сохранить ответ" (каждый может ошибиться) нет анализа, того, что в поле набора данных не пусто и весь этот набор формул мгновенно "улетает в никуда".
Я уж не говорю о постоянных "Вы были отключены от сервера".

И еще. Поскольку автор вопроса не виноват, даю два "голых" (без формул) решения.

1. Рекурсивная программа (как не надо решать подобные задачи)

{ рекурcивная программа }
function prod(a,b:integer):real;
var
  i:integer;
  p:real;
begin
  p:=1;
  for i:=a to b do p:=p*i;
  prod:=p
end;

function pow2(n:integer):integer;
var
  i,p:integer;
begin
  p:=1;
  for i:=1 to n do p:=p*2;
  pow2:=p
end;

function an(n:integer):real;
begin
  if n=1 then an:=0.5
  else an:=an(n-1)*n/prod(pow2(n-1)+1,pow2(n))
end;

var
  s:real;
  i,n:integer;
begin
  Write('n='); Read(n);
  s:=0;
  for i:=1 to n do s:=s+an(i);
  Writeln(s)
end.

Пример:
n=4
0.58348214285829

2. А вот рекуррентная, которую можно написать, если немного подумать.

{ рекуррентная программа }
var
  a,p,s:real;
  i,j,n,lo,hi:integer;
begin
  Write('n='); Read(n);
  a:=0.5; s:=a; lo:=1; hi:=2;
  for i:=2 to n do begin
    p:=1; lo:=hi+1; hi:=hi*2;
    for j:=lo to hi do p:=p*j;
    a:=a*i/p;
    s:=s+a
    end;
  Writeln(s)
end.

Пример
n=4
0.58348214285829
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика