Informatică, întrebare adresată de medeeacorina, 8 ani în urmă

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

Răspuns de andrei750238
1

► 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)


VxF: Aș menţiona că punctul d. este puţin dependent de limbaj. Unele limbaje pot calcula 100! fără probleme. De exemplu pentru Ruby și bc cele 158 de cifre nu sunt o problemă.
andrei750238: Da, sunt limbaje care au suport pentru numere mari (si Python intra in categoria asta).
Alte întrebări interesante