0916 - FactorialRec1
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>