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

0 голосов
29 просмотров

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


Информатика (23 баллов) | 29 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Из-за дурацкого сбоя этого сервиса при сохранении ответа пропал получасовой набор формул в LaTex. Прошу модераторов удалить этот ответ.

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

(150k баллов)
0

Огромное спасибо за разъяснения. А что означает каждая переменная? Пыталась разобраться, но все равно не въехала.