Faktorinė programa C: kaip apskaičiuoti skaičiaus faktorialą?



Teigiamo sveiko skaičiaus koeficientas yra sveiko skaičiaus ir visų po juo esančių sveikų skaičių sandauga. Sužinokite, kaip rašyti faktorių programą C pavyzdyje: 3! = 3 * 2 * 1

Teigiamo sveikojo skaičiaus koeficientas yra sveiko skaičiaus ir visų po juo esančių sveikų skaičių sandauga, t. Y. Skaičiaus n faktorialas (kurį žymi n!)

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





0 faktorius yra apibrėžtas kaip 1 ir nėra apibrėžtas neigiamiems sveikiesiems skaičiams. Yra keli būdai, kaip jį rasti, kurie išvardyti žemiau-

Pradėkime.



Faktorinis ciklo naudojimas

Tai paprasčiausias ir paprasčiausias būdas rasti skaičiaus faktorialą. Pirmiausia aplankyk kodą -

#include int main () {int I, num, fact = 1 // faktorialas apibrėžiamas kaip 1, nes mažiausia vertė yra 1 printf („Įveskite skaičių, kad apskaičiuotumėte jo faktorialą“) scanf („% d“, & num) jei (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 }

Išvestis

Faktorinis koeficientas 5 = 120



c ++ rūšiavimo funkcija

Paaiškinimas -

Skaičius, kurio faktorius turi būti surastas, laikomas įvestu ir saugomas kintamajame ir patikrinamas, jei jis yra neigiamas ar ne. Jei įvestas sveikas skaičius yra neigiamas, rodomas atitinkamas pranešimas. Iš anksto nustatyta, kad faktorialo reikšmė bus 1, nes jos mažiausia vertė yra 1. „For“ ciklas vykdomas teigiamiems sveikiesiems skaičiams (išskyrus 0, kurio bandymo sąlyga yra klaidinga ir todėl faktas lieka nulis). „For“ cikle faktoriaus vertė dauginama iš kiekvieno sveiko skaičiaus ir saugoma paeiliui, kol pasiekiamas įvesties skaičius. Pavyzdžiui, jei įvestis = 5, srautas eina į kilpą ir atliekami šie veiksmai -

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

Dabar 6> 5, todėl bandymo sąlyga tampa klaidinga ir ciklas nutraukiamas. Rodoma faktorialo vertė.

Faktorinis funkcijų naudojimas

Šis metodas yra žinomas kaip modulinis metodas ir jo reikėtų laikytis programuojant, nes jis yra gana efektyvus. Vienas iš jo pranašumų yra tas, kad kai reikia pakeisti kodą, užuot pakeitę visą kodą, galime tiesiog modifikuoti atitinkamą funkciją. Kodas, skirtas surasti skaičiaus faktorialą naudojant šį metodą, parodytas žemiau

#include long factororial (int num) // funkcija faktorialui apskaičiuoti, kuri ima sveiko skaičiaus vertę kaip parametrą ir grąžina int tipo vertę {int i long fact = 1 (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 } 

Rezultatas - Faktorinis koeficientas 5 = 120

„Linux“ sistemos administratoriaus vaidmenys ir atsakomybė

Paaiškinimas-

Programos logika yra ta pati, išskyrus tai, kad skirtinga funkcija naudojama apskaičiuoti faktorialą ir grąžinti vertę į pagrindinį metodą, nuo kurio prasideda vykdymas.

Faktorinis, naudojant rekursiją

Rekursija yra procesas, kurio metu funkcija pasikviečia, o atitinkama funkcija vadinama rekursine. Jį sudaro dvi dalys - pagrindinė sąlyga ir rekursinis skambutis. Pateikiamas pagrindinės sąlygos sprendimas, o didesnės vertės sprendimas gali būti išspręstas konvertuojant į mažesnes vertes, kol bus pasiektas ir naudojamas bazinis tirpalas.

Žemiau yra kodas, kaip surasti faktorių naudojant rekursiją: -

#include int fact (int) // funkcijos prototipas int main () {int num printf ('Įveskite numerį, kurio faktorių reikia rasti:') 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 } } 

Rezultatas - koeficientas iš 5 = 120

Paaiškinimas -Tarkime, kad vartotojas įveda 5 kaip įvestį, tada metodo „main“ () num vertė yra 5. Kai srautas eina „printf“ sakinyje (12 eilutė), atliekama raginimo į faktą (5) funkcija. Dabar faktas (5) skaičius yra 5, kuris nėra lygus 0, todėl srautas eina į kitą sakinį, kur atgaliniame sakinyje atliekamas rekursinis skambutis ir atliekamas faktas (4). Procesas kartojamas tol, kol bus pasiekta pagrindinė sąlyga, t. Y., = Num Dabar srautas eina į faktą (1), iš kurio grąžinama 1 (kaip faktas (1) skaičius = 1) * 1 (iš fakto (0 grąžinta vertė)). Šis procesas kartojamas tol, kol gaunama reikiama vertė.

Laiko ir erdvės sudėtingumas - rekursijos V / S iteracija

Rekursijai-

Apie laiko sudėtingumas , mes žinome, kad faktorius 0 yra vienintelis palyginimas. Todėl T (0) = 1. Bet kurio kito skaičiaus faktoriumi procesas apima vieną palyginimą, vieną dauginimą, vieną atimimą ir vieną funkcijų iškvietimą. Todėl

kaip įdiegti Java programą AWS

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

Kadangi mes žinome, kad T (0) = 1 ir k = n, (n-k) = 0

Todėl T (n) = T (0) + 3n
= 1 + 3n

Todėl kodo laiko sudėtingumas yra O (n).

Apie kosmoso sudėtingumas, kiekvienam skambučiui sukuriama rietuvė, kuri bus palaikoma tol, kol jo vertė busapskaičiavo ir grąžino. Pavyzdžiui, jei n = 5, reikės išlaikyti šiuos kaminus

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

Kaip matome, teks išlaikyti 5 kaminus, kol bus pasiektas iškvietimas f (0), kurio vertė yražinomas ir grąžinamas. Todėl n faktoriams teks išlaikyti n šūsnius. Taigi erdvės sudėtingumasyra O (n). Iš aukščiau pateiktų paveikslėlių taip pat akivaizdu, kad n = 5 atveju teks turėti 5 kaminuspalaikoma. Todėl n faktoriams teks išlaikyti n šūsnius. Taigi erdvės sudėtingumas yra O (n).

Iteracijai-

Apie laiko sudėtingumas, kilpos viduje yra n iteracijų, todėl laiko sudėtingumas yra O (n).

Apie kosmoso sudėtingumas, iteraciniam sprendimui yra tik vienas kaminas, kurį reikia išlaikyti, ir naudojamas sveikasis skaičius. Taigi erdvės sudėtingumas yra O (1).

Viskas šiam straipsniui. Tikiuosi, kad jūs supratote C faktorialinės programos sampratą ir laiko sudėtingumą.

Jei kyla klausimų, nedvejodami užduokite visus klausimus „faktorių programos C“ komentarų skiltyje, ir mūsų komanda mielai atsakys.