0820 - FactorialRec: Difference between revisions
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ț... |
No edit summary |
||
Line 10: | Line 10: | ||
factorial(4) este 24. | 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 == | == 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>