0916 - FactorialRec1

From Bitnami MediaWiki
Revision as of 10:32, 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 determină factorialul unui număr transmis ca parametru și întoarce rezultatul prin intermediul unui parametru de ieșire.

Restricţii şi precizări

  • Numele funcției scrise este factorial
  • Funcția are un doi parametri, n, număr natural, n≤10, și parametrul f, prin intermediul căruia se întoarce rezultatul
  • Ordinea celor doi parametri este n, f

Explicație

Această funcție calculează factorialul unui număr dat n. Argumentul suplimentar f este folosit pentru a reține rezultatul parțial în timpul apelurilor recursive ale funcției.

În esență, funcția începe prin verificarea cazului de bază, unde n este zero și returnează 1 (deoarece 0! este 1). În caz contrar, funcția își va apela recursiv propria instanță, scăzând n cu 1 și multiplicând f cu n înainte de a se întoarce. În final, valoarea rezultată a lui f va fi returnată.

Rezolvare

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

   return isinstance(n, int) and n >= 0 and n <= 10

def factorial(n, f):

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

def main():

   n = input("Introduceți un număr întreg pozitiv: ")
   try:
       n = int(n)
       f = 1
       if validate_n(n):
           result = factorial(n, f)
           print(f"{n}! = {result}")
       else:
           print("Numărul introdus nu este valid.")
   except ValueError:
       print("Nu ați introdus un număr întreg.")

</syntaxhighlight>