Faktooniprogramm C-s: kuidas arvutada faktoorarv?



Positiivse täisarvu koefitsient on täisarvu ja kõigi selle all olevate täisarvude korrutis. Õppige, kuidas kirjutada faktoriaalprogrammi C-s. Näide: 3! = 3 * 2 * 1

Positiivse täisarvu koefitsient on täisarvu ja kõigi selle all olevate täisarvude korrutis, see tähendab, et arvu n faktoriaal (mida tähistab n!) Oleks antud

miks peaksite Pythoni õppima

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





Faktooriks 0 on määratletud 1 ja negatiivsete täisarvude korral pole seda määratletud. Selle leidmiseks on mitu võimalust, mis on loetletud allpool -

Alustame.



Faktoriaalne kasutamine silmuseks

See on lihtsaim ja lihtsaim viis arvu faktori leidmiseks. Kõigepealt külastage koodi -

#include int main () {int I, num, fact = 1 // faktori määratlemine ühena, kuna vähim väärtus on 1 printf ('Faktoriaali arvutamiseks sisestage arv') 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 }

Väljund-

Faktoor 5 = 120



Selgitus -

Arv, mille faktoriaal leitakse, võetakse sisendina ja salvestatakse muutujasse ning kontrollitakse, kas see on negatiivne või mitte. Kui sisestatud täisarv on negatiivne, kuvatakse vastav teade. Faktoori väärtuseks on eelnevalt määratud 1, kuna selle väikseim väärtus on 1. For silmus käivitatakse positiivsete täisarvude jaoks (välja arvatud 0, mille testtingimus on vale ja seega fakt jääb nulliks). For-tsüklis korrutatakse faktori väärtus iga täisarvuga ja salvestatakse järjestikku, kuni sisendi number on saavutatud. Näiteks sisendi = 5 korral läheb voog silmusesse ja toimuvad järgmised sammud -

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

Nüüd 6> 5, seetõttu muutub testi tingimus valeks ja silmus lõpetatakse. Kuvatakse faktori väärtus.

Faktoriaalfunktsioonide kasutamine

Seda lähenemist tuntakse modulaarse lähenemisena ja seda tuleks programmeerimisel järgida, kuna see on üsna tõhus. Selle üks eelis on see, et kui peame koodis muudatusi tegema, siis kogu koodi muutmise asemel saame lihtsalt muuta vastavat funktsiooni. Selle lähenemisviisi abil arvu faktori leidmise kood on näidatud allpool

#include pikk faktoriaal (int num) // funktsioon faktori arvutamiseks, mis võtab parameetriks täisarvu ja tagastab int tüübi väärtuse {int i pikk fakt = 1 (i = 1 i jaoks)<= 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 } 

Väljund - Faktoor 5 = 120

Selgitus-

Programmi loogika on sama, välja arvatud see, et faktoori arvutamiseks ja väärtuse tagastamiseks põhimeetodile, kust käivitamine algab, kasutatakse erinevat funktsiooni.

teisendada kümnendkoht binaarseks püütoniks

Faktoriaal rekursiooni abil

Rekursioon on protsess, mille käigus funktsioon kutsub ennast ja vastavat funktsiooni rekursiivseks funktsiooniks. See koosneb kahest osast - põhitingimusest ja rekursiivsest kõnest. Alusolukorra lahendus pakutakse, samal ajal kui suurema väärtuse lahendamise saab lahendada, teisendades väiksemateks väärtusteks, kuni baaslahendus on saavutatud ja kasutatud.

Allpool on kood rekursiooni abil faktori leidmiseks: -

#include int fact (int) // funktsiooni prototüüp int main () {int num printf ('Sisestage number, mille faktoriaal leitakse:') 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 } } 

Väljund - Faktoor 5 = 120

Selgitus -Oletame, et kasutaja sisestab sisendina 5, siis meetodi main () korral on num väärtus 5. Kui vool kulgeb printf-lauses (rida 12), tehakse funktsioon faktile (5). Nüüd on fakt (5) arv 5, mis ei ole võrdne 0-ga, seetõttu läheb voog teise lause juurde, kus vastulauses tehakse rekursiivne kõne ja tehakse fakt (4). Protsessi korratakse seni, kuni põhitingimus, st num = 0 on saavutatud ja 1 tagastatakse. Nüüd läheb voog faktini (1), kust tagastatakse 1 (nagu fakt (1) arv = 1) * 1 (faktist tagastatud väärtus (0)). Seda protsessi korratakse, kuni saadakse nõutav väärtus.

Aja ja ruumi keerukus - rekursiooni V / S iteratsioon

Rekursiooniks

Seoses aja keerukus , teame, et faktoriaal 0 on ainus võrdlus. Seetõttu T (0) = 1. Mis tahes muu numbri faktoriaali jaoks hõlmab protsess ühte võrdlust, ühte korrutamist, ühte lahutamist ja ühte funktsioonikõnet. Seega

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

Kuna me teame, et T (0) = 1 ja k = n korral, (n-k) = 0

Seetõttu T (n) = T (0) + 3n
= 1 + 3n

Seetõttu on koodi ajaline keerukus O (n).

Seoses ruumi keerukus, Iga kõne jaoks luuakse virn, mida hoitakse seni, kuni selle väärtus onarvutati ja tagastati. Näiteks n = 5 korral tuleb säilitada järgmised virnad

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

Nagu näeme, tuleb 5 virna säilitada seni, kuni saabub kõne f (0), mille väärtus onteada ja tagastatakse. Seetõttu tuleb n faktoori jaoks säilitada n virna. Seega ruumi keerukuson O (n). Ülalolevatest piltidest nähtub ka, et n = 5 korral peab olema 5 virnahooldatud. Seetõttu tuleb n faktoori jaoks säilitada n virna. Seega on ruumi keerukus O (n).

Iteratsiooni jaoks-

Seoses aja keerukus, tsükli sees on n iteratsiooni, seetõttu on aja keerukus O (n).

Seoses ruumi keerukus, iteratiivse lahenduse jaoks on ainult üks virn, mida tuleb hooldada, ja kasutatakse täisarvu muutujat. Niisiis on ruumi keerukus O (1).

See on selle artikli jaoks kõik. Loodan, et olete aru saanud C faktoriaalprogrammi kontseptsioonist koos aja keerukusega.

Kui teil tekib küsimusi, küsige julgelt kõiki oma küsimusi jaotises „Faktooniprogramm C-s” ja meie meeskond vastab meeleldi.