0820 - FactorialRec

From Bitnami MediaWiki
Revision as of 10:29, 6 April 2023 by Cata (talk | contribs)

Cerința

Pentru un număr natural dat n, se numește factorialul lui n și se notează n! următoarea expresie: 1*2*3*...*n. Prin definiție, 0!=1.

Să se scrie o funcție Python recursivă care returnează factorialul unui număr dat ca parametru.

Restricţii şi precizări

  • Numele funcției scrise este factorial
  • Funcția are un parametru, n, număr natural, n≤10

Exemplu

factorial(4) este 24.

Explicație

Această funcție calculează factorialul unui număr prin metoda recursivă.

Dacă n este egal cu 0, se returnează 1 deoarece factorialul lui 0 este 1. În caz contrar, se înmulțește n cu factorialul lui n-1 și se returnează această valoare. De exemplu, dacă se dorește calcularea factorialului lui 4, funcția va apela factorial(3), care va apela factorial(2), care va apela factorial(1), care va apela factorial(0). Când se ajunge la factorial(0), se returnează 1, apoi se înmulțește cu 1 pentru a obține factorial(1) (deoarece factorial(1) = 1 x factorial(0)). Apoi, se înmulțește cu 2 pentru a obține factorial(2), cu 3 pentru a obține factorial(3), și în cele din urmă cu 4 pentru a obține factorial(4).

De reținut că această funcție poate fi implementată și iterativ, fără utilizarea recursivității, ceea ce poate fi mai eficient în anumite cazuri.

Rezolvare

<syntaxhighlight lang="python"> def validate_input(n):

   if not isinstance(n, int):
       return False
   if n < 0 or n > 10:
       return False
   return True

def factorial(n):

   if n == 0:
       return 1
   else:
       return n * factorial(n-1)

def main():

   n = input("Introduceti un numar intreg pozitiv: ")
   try:
       n = int(n)
       if validate_n(n):
           result = factorial(n)
           print(f"Factorialul lui {n} este {result}.")
       else:
           print("Numarul introdus nu este valid.")
   except ValueError:
       print("Nu ati introdus un numar intreg.")

</syntaxhighlight>