Programa de sucesion por recurrencia
{ A Ver si e entendido todo bien y te sirve revisa las nuevas entradas realizadas }
program recursiv;
uses
crt;
var
dat : integer;
tec : char;
function numero : integer;
var
dt, x, y, ii, i : integer;
dato : string[15];
begin
clrscr;
textcolor(15);
x := 10;
y := 10;
fillchar(dato,16,' ');
dato[0] := chr(15);
i := 1;
gotoxy(x,y);write('Entre N§ : ');
x := 21;
gotoxy(x,y);
repeat
tec := readkey;
if tec in[#48..#57] then
begin
dato[i] := tec;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 15 then
begin
i := 15;
end;
end;
if tec = #8 then
begin
i := i - 1;
if i < 1 then
begin
i := 1;
end;
dato[i] := ' ';
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
end;
until (tec = #13) or (tec = #27);
if tec = #13 then
begin
val(dato,dt,ii);
numero := dt;
gotoxy(10,10);clreol;
end
else
begin
numero := 0;
end;
end;
{calculo recursivo }
function calculo_recursivo(n: integer): integer;
begin
if n = 0 then
calculo_recursivo := 1
else
calculo_recursivo := n * calculo_recursivo(n - 1)
end;
procedure presenta_resultados(nu : integer);
var
max, dr : real;
dd : integer;
begin
gotoxy(2,2);
writeln(' ** N§ Entrado ES = ',dat,' ** ');
for dd := 0 to dat - 1 do
begin
if calculo_recursivo(dd) > 0 then { mayor que cero funcion }
begin
{2^(N*(N+1)/2)}
dr := (dd * (dd + 1) / 2); {funcion (dd * (dd + 1) / 2)}
max := EXP(dr * ln(2)); {2 elevado a dr}
writeln(' elemento N§ ',dd + 1,' : ',max:8:2);
end;
end;
end;
begin
clrscr;
textcolor(15);
dat := numero;
presenta_resultados(dat);
readln;
end.