0820 - FactorialRec
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>