Programul factorial în C: Cum se calculează factorialul unui număr?



Factorialul unui număr întreg pozitiv este produsul unui număr întreg și toate numerele întregi sub acesta. Aflați cum să scrieți programul factorial în C. Exemplu: 3! = 3 * 2 * 1

Factorialul unui întreg pozitiv este produsul unui întreg și toate numerele întregi de sub acesta, adică factorialul numărului n (reprezentat prin n!) Ar fi dat de

n! = 1 * 2 * 3 * 4 *. . . . . * n





Factorialul lui 0 este definit ca fiind 1 și nu este definit pentru numerele întregi negative. Există mai multe moduri de a o găsi, care sunt enumerate mai jos-

Să începem.



Utilizarea factorială pentru buclă

Este cel mai simplu și simplu mod de a găsi factorialul unui număr. Să vizităm mai întâi codul -

#include int main () {int I, num, fact = 1 // definind factorial ca 1, deoarece cea mai mică valoare este 1 printf („Introduceți un număr pentru a calcula factorialul său”) scanf („% d”, & num) dacă (num<0) //if the input is a negative integer { printf (“Factorial is not defined for negative numbers.”) } else { for(i=1i0, therefore fact value remains 1 { fact = fact * i // keeps on multiplying and storing in the value of factorial till the input integer is reached } printf(“Factorial of %d = %dn”, num, fact) } return 0 //since we have defined the main() method with a return value of integer type }

Ieșire-

Factorial de 5 = 120



Explicaţie -

Numărul al cărui factorial trebuie găsit este luat ca intrare și stocat într-o variabilă și se verifică dacă este negativ sau nu. Dacă numărul întreg introdus este negativ, atunci se afișează mesajul corespunzător. Valoarea factorială este predefinită să fie 1, deoarece cea mai mică valoare este 1. Bucla for este executată pentru numere întregi pozitive (cu excepția lui 0 pentru care condiția de testare este falsă și, prin urmare, rămâne zero). În bucla for, valoarea factorială este înmulțită cu fiecare număr întreg și stocată succesiv până la atingerea numărului de intrare. De exemplu, pentru intrare = 5, fluxul merge la buclă și urmează pașii următori-

fapt = 1, i = 1 -> fapt = 1 * 1 = 1 -> i = 2
fapt = 1, i = 2 -> fapt = 1 * 2 = 2 -> i = 3
fact = 2, i = 3 -> fact = 2 * 3 = 6 -> i = 4
fact = 6, i = 4 -> fact = 6 * 4 = 24 -> i = 5
fact = 24, i = 5 -> fact = 24 * 5 = 120 -> i = 6

Acum 6> 5, prin urmare condiția de testare devine falsă și bucla este terminată. Se afișează valoarea factorială.

Folosirea factorială a funcțiilor

Această abordare este cunoscută ca o abordare modulară și ar trebui urmată pentru programare, deoarece este destul de eficientă. Unul dintre avantajele sale este că atunci când trebuie să facem modificări la cod, atunci în loc să schimbăm codul complet, putem doar să modificăm funcția în cauză. Codul pentru găsirea factorialului unui număr folosind această abordare este prezentat mai jos

#include factorial lung (int num) // funcție pentru calculul factorial care ia o valoare întreagă ca parametru și returnează o valoare de tip int {int i long fact = 1 pentru (i = 1 i<= num i++) fact = fact * i return fact //returns to function call } int main() //execution begins from main() method { int num printf('Enter a number to calculate its factorialn') scanf('%d', &num) if(num<0) //if the input is a negative integer { printf('Factorial is not defined for negative numbers.') } printf('Factorial of %d = %dn', num, factorial(num)) //call to factorial function passing the input as parameter return 0 } 

Ieșire - Factorial de 5 = 120

Explicaţie-

Logica programului este aceeași, cu excepția faptului că funcția diferită este utilizată pentru a calcula factorialul și pentru a returna valoarea la metoda principală de unde începe execuția.

Factorial folosind recursivitate

Recursivitatea este procesul în care o funcție se numește singură și funcția corespunzătoare se numește funcție recursivă. Se compune din două părți - o condiție de bază și un apel recursiv. Soluția la starea de bază este furnizată, în timp ce soluția la valoarea mai mare poate fi rezolvată prin conversia la valori mai mici până când soluția de bază este atinsă și utilizată.

Mai jos este codul pentru găsirea factorială utilizând recursivitatea: -

#include int fact (int) // function prototype int main () {int num printf ('Introduceți numărul al cărui factorial urmează să fie găsit:') scanf ('% d', & num) if (num<0) { printf('ERROR. Factorial is not defined for negative integers') } printf('Factorial of %d is %d', num, fact(num)) //first call is made return 0 } int fact(int num) { if(num==0) //base condition { return 1 } else{ return(num*fact(num-1)) //recursive call } } 

Ieșire - Factorial de 5 = 120

Explicaţie -Să presupunem că utilizatorul introduce 5 ca intrare, apoi în metoda main () valoarea lui num este 5. Pe măsură ce fluxul merge în instrucțiunea printf (linia 12) se face o funcție de apel la fapt (5). Acum, de fapt (5) num este 5, care nu este egal cu 0, prin urmare fluxul merge la instrucțiunea else în care în declarația de retur se face un apel recursiv și se face faptul (4). Procesul se repetă până la starea de bază, adică, num = 0 este atins și 1 este returnat. Acum fluxul merge la fact (1) de unde este returnat 1 (ca și pentru fact (1) num = 1) * 1 (valoarea returnată din fact (0)). Acest proces se repetă până se obține valoarea cerută.

Complexitatea timpului și spațiului - recursie V / S iterație

Pentru recursivitate

In ceea ce priveste complexitatea timpului , știm că factorialul 0 este singura comparație. Prin urmare, T (0) = 1. Pentru factorialul oricărui alt număr procesul implică o comparație, o înmulțire, o scădere și o singură funcție. Prin urmare

T (n) = T (n-1) +3
= T (n-2) +6
= T (n-3) +9
= & hellip.
= T (n-k) + 3k

Deoarece știm T (0) = 1 și pentru k = n, (n-k) = 0

Prin urmare T (n) = T (0) + 3n
= 1 + 3n

Prin urmare, complexitatea timpului codului este O (n).

In ceea ce priveste complexitate spațială, se creează o stivă pentru fiecare apel care va fi menținută până când valoarea acestuia estecalculat și returnat. De exemplu, pentru n = 5, următoarele stive vor trebui menținute

f (5) -> f (4) -> f (3) -> f (2) -> f (1) -> f (0)

După cum putem vedea, vor trebui menținute 5 stive până la atingerea unui apel către f (0) a cărui valoare estecunoscut și este returnat. Prin urmare, pentru n factorial, n stive vor trebui menținute. Astfel complexitatea spațiuluieste O (n). Este, de asemenea, evident din imaginile de mai sus că pentru n = 5, 5 stive vor trebui să fiemenținut. Prin urmare, pentru n factorial, n stive vor trebui menținute. Astfel, complexitatea spațiului este O (n).

ce face init în python

Pentru Iterare-

In ceea ce priveste complexitatea timpului, există n iterații în interiorul buclei, prin urmare complexitatea timpului este O (n).

In ceea ce priveste complexitate spațială, pentru soluția iterativă există o singură stivă care trebuie menținută și se utilizează o variabilă întreagă. Deci complexitatea spațiului este O (1).

Asta este tot pentru acest articol. Sper că ați înțeles conceptul programului factorial în C, împreună cu complexitățile de timp.

Dacă întâmpinați întrebări, nu ezitați să vă adresați toate întrebările în secțiunea de comentarii din „programul factorial în C”, iar echipa noastră va fi bucuroasă să vă răspundă.