0820 - FactorialRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == 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. == Important == Soluția propusă va conține doar funcț...
 
Cata (talk | contribs)
No edit summary
Line 10: Line 10:
factorial(4) este 24.
factorial(4) este 24.


== Important ==
== Explicație ==
Soluția propusă va conține doar funcția cerută. Introducerea în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție, care vor duce la depunctarea soluției.
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 ==
== Rezolvare ==


<syntaxhighlight lang="python">
<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):
def factorial(n):
     if n == 0:
     if n == 0:
Line 22: Line 33:
         return n * factorial(n-1)
         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>
</syntaxhighlight>

Revision as of 10:29, 6 April 2023

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>