Faktorski program v C: Kako izračunati faktorijel števila?



Faktor na pozitivno celo število je zmnožek celega števila in vseh celih števil pod njim. Naučite se pisati faktorjarski program v jeziku C. Primer: 3! = 3 * 2 * 1

Faktorijal pozitivnega celega števila je zmnožek celotnega števila in vseh celih števil pod njim, tj. Faktorijel števila n (predstavljen z n!) Bi bil podan z

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





Faktorial 0 je opredeljen kot 1 in ni določen za negativna cela števila. Spodaj je naštetih več načinov -

Začnimo.



Faktorijska uporaba za zanko

To je najlažji in najpreprostejši način za iskanje faktorja števila. Najprej obiščimo kodo -

niz predmetov razreda java
#include int main () {int I, num, fact = 1 // definiranje faktorja kot 1, ker je najmanjša vrednost 1 printf ('Vnesite številko za izračun faktorja') scanf ('% d', & num) if (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 }

Izhod-

Faktorijev od 5 = 120



Pojasnilo -

Številka, katere faktorije je treba najti, se vzame kot vhod in shrani v spremenljivko ter se preveri, če je negativna ali ne. Če je vneseno celo število negativno, se prikaže ustrezno sporočilo. Vrednost faktorja je vnaprej določena na 1, saj je njegova najmanjša vrednost 1. Zanka for se izvede za pozitivna cela števila (razen za 0, pri katerih je testni pogoj neresničen in tako dejstvo ostane nič). V zanki for se vrednost faktorja pomnoži z vsakim celim številom in zaporedno shrani, dokler ni dosežena vhodna številka. Na primer, za input = 5 preide tok v zanko in izvedejo se naslednji koraki -

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

Zdaj 6> 5, zato preizkusni pogoj postane napačen in zanka se prekine. Prikaže se vrednost faktorja.

Faktorska uporaba funkcij

Ta pristop je znan kot modularni pristop in ga je treba upoštevati pri programiranju, saj je dokaj učinkovit. Ena od njegovih prednosti je, da kadar moramo spremeniti kodo, potem pa lahko namesto celotne kode spremenimo zadevno funkcijo. Koda za iskanje faktorja števila s tem pristopom je prikazana spodaj

#include long factorial (int num) // funkcija za izračun faktorja, ki za parameter vzame celoštevilčno vrednost in vrne vrednost tipa int {int i long fact = 1 for (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 } 

Izhod - Faktorijev od 5 = 120

Pojasnilo-

Logika programa je enaka, le da se za izračun faktorja in vrnitev vrednosti glavni metodi, od koder se izvajanje začne, uporablja drugačna funkcija.

Faktorial z uporabo rekurzije

Rekurzija je postopek, v katerem se funkcija sama pokliče, ustrezna funkcija pa se imenuje rekurzivna funkcija. Sestavljen je iz dveh delov - osnovnega stanja in rekurzivnega klica. Na voljo je rešitev osnovnega stanja, medtem ko je rešitev večje vrednosti mogoče rešiti s pretvorbo v manjše vrednosti, dokler osnovna rešitev ni dosežena in uporabljena.

Spodaj je koda za iskanje faktorja z uporabo rekurzije: -

#include int fact (int) // prototip funkcije int main () {int num printf ('Vnesite številko, katere faktorial najdemo:') 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 } } 

Izhod - Faktorijev od 5 = 120

Pojasnilo -Recimo, da uporabnik vnese 5 kot vhod, potem je pri metodi main () vrednost num 5. Ko pretok poteka v stavku printf (vrstica 12), se izvede klic k dejstvu (5). Zdaj je za fact (5) num 5, kar ni enako 0, zato gre tok k stavku else, kjer se v povratnem stavku izvede rekurzivni klic in izvede fact (4). Postopek se ponavlja, dokler ni dosežen osnovni pogoj, tj. Število = 0 in vrnitev 1. Zdaj tok prehaja na fact (1), od koder se vrne 1 (kot za fact (1) num = 1) * 1 (vrednost, vrnjena iz fact (0)). Ta postopek ponavljamo, dokler ne dobimo zahtevane vrednosti.

Zapletenost časa in prostora - ponovitev V / S ponovitev

Za rekurzijo-

Glede časovna zapletenost vemo, da je faktorjska 0 edina primerjava. Zato je T (0) = 1. Za faktorijelo katere koli druge številke postopek vključuje eno primerjavo, eno množenje, eno odštevanje in en klic funkcije. Torej

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

Ker poznamo T (0) = 1 in za k = n, je (n-k) = 0

primeri programov java applet z izhodnimi podatki

Zato je T (n) = T (0) + 3n
= 1 + 3n

Zato je časovna zapletenost kode O (n).

Glede zapletenost prostora, za vsak klic se ustvari sklad, ki se bo ohranil, dokler njegova vrednost ne boizračunano in vrnjeno. Na primer za n = 5 je treba vzdrževati naslednje sklade

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

Kot lahko vidimo, bo treba 5 skladov vzdrževati, dokler ne bo dosežen klic f (0), katerega vrednost jeznano in vrnjeno. Zato bo za n faktorije treba vzdrževati n skladov. Tako zapletenost prostoraje O (n). Iz zgornjih slik je razvidno tudi, da bo za n = 5, 5 skladovvzdrževati. Zato bo za n faktorije treba vzdrževati n skladov. Tako je zapletenost prostora O (n).

Za ponovitev -

Glede časovna zapletenost, znotraj zanke je n ponovitev, zato je časovna zapletenost O (n).

Glede zapletenost prostora, za iterativno rešitev obstaja samo en sklad, ki ga je treba vzdrževati in uporabiti celoštevilčno spremenljivko. Torej je zapletenost prostora O (1).

To je vse za ta članek. Upam, da ste razumeli koncept faktorskega programa v C skupaj s časovno zapletenostjo.

Če naletite na kakršna koli vprašanja, vas prosimo, da vsa vprašanja postavite v oddelku za komentarje v »faktorjalskem programu v C« in naša ekipa vam bo z veseljem odgovorila.