Informatică, întrebare adresată de maxim1105, 9 ani în urmă

Elaborati o forma recursiva a functiei ce urmeaza:
function F(n: Narural): Natural;
var i : Natural;
begin
F:=1;
for i:=1 to n do F:=F*i;
end;

Răspunsuri la întrebare

Răspuns de blindseeker90
1
//Programul calculeaza factorialul unui numar n!=1*2*3*..*n

program Factorial_Tema;

//Cardinal este folosit pentru a desemna un numar natural
//Este practic tot intervalul de la 0 la 2^32. in cazul argumentului n
//putem folosi tipul de date Integer care este de dimensiune mai mica
function F(n:Integer):Cardinal;
var i:Integer;
var p:Cardinal;
begin
//daca folosesti functia cum este data in enunt
//iti va da eroare, pentru ca F:=F*i ar trebui sa aiba in termenul F din membrul drept
//cel putin un argument adica sa fie ceva de forma F:=F(n)*i
//pentru a trece peste aceasta problema, am declarat o variabila p
p:=1;
for i:=1 to n do p:=p*i;
//la sfarsit functia va scoate cat este p
F:=p
end;

//recursiv
//putem vedea ca n!=(1*2*3*..*(n-1))*n=n*(n-1)!
//o sa folosim aceasta relatie recursiva pentru a calcula factorialul

function Factorial(n:Integer):Cardinal;
begin
//daca n>1 aplicam relatia de factorial de mai sis
if n>1 then Factorial:=n*Factorial(n-1)
else
//dca este n=1, atunci F(1)=1!=1, oprim recursivitatea
Factorial:=1;
end;

var n:Integer;
begin
writeln('Scrieti numarul pentru factorial:');
readln(n);
writeln('Rezultat factorial cu forma iterativa:',F(n));
writeln('Rezultat factorial cu forma recursiva:',Factorial(n));
end.

ignat2: mă poţi ajuta şi pe mine te roooog mult
Alte întrebări interesante