Calculati n! pentru n numar natural dat folosind:
a. Un algoritm nerecursiv
b. Un algoritm recursive
c. Ce se intampla daca n este negativ?
d. Ce se intampla daca n este un numar natural mare, de exemplu 100 ?
Răspunsuri la întrebare
► Algoritm nerecursiv:
int factorial(int n){
int f = 1;
for(int i=1; i<=n; i++)
f = f * i;
return f;
}
► Algoritm recursiv:
int factorial(int n){
if (n<=1) return 1;
return n * factorial(n-1);
}
► Ce se intampla daca n este negativ?
In cazul algoritmului scris de mine se va returna 1.
Daca nu dorim acest comportament putem arunca exceptie in cazul in care n este negativ adaugand aceasta linie de cod la inceputul functiei:
if (n < 0) throw exception("Invalid parameter for factorial function");
In acest caz, daca primim n negativ executia programului se va opri cu eroare (daca exceptia nu e tratata).
Alternativ putem returna 0 sau o valoare negativa si retinem ca daca am primit ceva mai mic decat 0 de la functie am trimis un parametru invalid:
if (n < 0) return 0;
Avem deci mai multe variante de tratare a acestei probleme. Ramane la latitudinea programatorului cum doreste sa abordeze situatia.
► Ce se intampla daca n este un numar mare?
In acest caz int nu poate stoca aceasta valoare astronomica si va aparea ceea ce se numeste "integer overflow" (cand trecem de valoarea maxima ce poate fi retinuta in int ne intoarcem la valoarea minima)