0916 - FactorialRec1: 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 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,...
 
Cata (talk | contribs)
No edit summary
Line 8: Line 8:
* Funcția are un doi parametri, n, număr natural, n≤10, și parametrul f, prin intermediul căruia se întoarce rezultatul
* 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
* Ordinea celor doi parametri este n, f
== 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 dat <code>n</code>. Argumentul suplimentar <code>f</code> 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 <code>n</code> este zero și returnează 1 (deoarece 0! este 1). În caz contrar, funcția își va apela recursiv propria instanță, scăzând <code>n</code> cu 1 și multiplicând <code>f</code> cu <code>n</code> înainte de a se întoarce. În final, valoarea rezultată a lui <code>f</code> va fi returnată.


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    return isinstance(n, int) and n >= 0 and n <= 10
def factorial(n, f):
def factorial(n, f):
     if n == 0:
     if n == 0:
Line 20: Line 25:
         f *= n
         f *= n
     return f
     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>
</syntaxhighlight>

Revision as of 10:32, 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 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>