Составить рекурсивную прогрумму которая вычисляет y по формуле

Guap

Составьте пожалуйста рекурсивную программу которая будет вычислять y
6 ответов

Guap

program fs;
var n:integer;
    s:integer;
function fact(n:integer):integer);
begin
     if n<=1 then fact:=1 else fact:=n*fact(n-1);
end;
function Degree(a:integer, n:integer):integer;
var n1:integere;
begin  
     if n=0 then Degree:=1
            else if n=1 then Degree:=a
                        else begin
                                  n1:=n div 2;
                                  Degree:=Degree(a,n1)*Degree(a,n-n1);
                             end;
end;
function FactSumm(n:integer):integer;
begin
     if n=1 then FactSumm:=Fact(n)/Degree(2,n) else FactSumm:=Fact(n)/Degree(2,n)+FactSumm(n-1);
end;
begin
     write('n='); readln(n);
     if n>=1 then
                 begin
                      s:=FactSumm(n);
                      writeln('Сумма ',n,' первых членов=',s);
                 end
             else writeln('Недопустимое количество'); 
end.


Guap

Спасибо большое


Guap

Ну если уж писать не 1 функцию, тогда уж 2.
program fs;
 
function rec(n:integer):real;
begin
if n=1 then rec:=1/2 else rec:=rec(n-1)*n/2;
end;
 
function Summ(n:integer):real;
begin
if n=0 then Summ:=0
else Summ:=Summ(n-1)+rec(n);
end;
var n:integer;
    s:real;
begin
write('n=');
readln(n);
if n>=1 then
writeln('Сумма ',n,' первых членов=',Summ(n))
else writeln('Недопустимое количество');
end.


Guap

function FactSumm(n:integer):integer;
Прогнал.
program fs;
var n:integer;
    s:real;
function fact(n:integer):integer);
begin
     if n<=1 then fact:=1 else fact:=n*fact(n-1);
end;
function Degree(a:integer, n:integer):integer;
var n1:integere;
begin  
     if n=0 then Degree:=1
            else if n=1 then Degree:=a
                        else begin
                                  n1:=n div 2;
                                  Degree:=Degree(a,n1)*Degree(a,n-n1);
                             end;
end;
function FactSumm(n:integer):real;
begin
     if n=1 then FactSumm:=Fact(n)/Degree(2,n) else FactSumm:=Fact(n)/Degree(2,n)+FactSumm(n-1);
end;
begin
     write('n='); readln(n);
     if n>=1 then
                 begin
                      s:=FactSumm(n);
                      writeln('Сумма ',n,' первых членов=',s);
                 end
             else writeln('Недопустимое количество'); 
end.


Guap

Вы меня запутали какой вариант правильны?)


Guap

С real. И кто сказал, что правильный здесь один? Задачу можно решить различно. Но то, что в посте #2, содержит ошибку.