Faktorski program u C: Kako izračunati faktorijel broja?



Čimbenik pozitivnog cijelog broja umnožak je cijelog broja i svih cijelih brojeva ispod njega. Naučite kako napisati faktorijelski program na C. Primjer: 3! = 3 * 2 * 1

Faktorijal pozitivnog cijelog broja umnožak je cijelog broja i svih cijelih brojeva ispod njega, tj. Faktorijel broja n (predstavljen s n!) Dao bi

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





Faktorijal 0 definiran je kao 1 i nije definiran za negativne cijele brojeve. Postoji više načina za pronalaženje koji su navedeni u nastavku -

Započnimo.



Faktorijalno korištenje za petlju

To je najlakši i najjednostavniji način pronaći faktorijel broja. Prvo posjetimo kod -

#include int main () {int I, num, fact = 1 // definiranje faktora kao 1 jer je najmanja vrijednost 1 printf („Unesite broj za izračun faktora“) 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 }

Izlaz-

Faktorijal od 5 = 120



Obrazloženje -

Broj čiji faktorijel treba pronaći uzima se kao ulaz i pohranjuje u varijablu i provjerava je li negativan ili ne. Ako je upisani cijeli broj negativan, prikazuje se odgovarajuća poruka. Vrijednost faktora je unaprijed definirana kao 1, jer je njegova najmanja vrijednost 1. Petlja for izvršava se za pozitivne cijele brojeve (osim za 0 za koji je uvjet ispitivanja netačan i time činjenica ostaje nula). U petlji for, vrijednost faktora se množi sa svakim cijelim brojem i sukcesivno pohranjuje dok se ne postigne ulazni broj. Na primjer, za input = 5, tok ide u for loop i slijede sljedeći koraci-

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

Sada je 6> 5, stoga uvjet ispitivanja postaje netačan i petlja se prekida. Prikazuje se vrijednost faktora.

Faktorijalne funkcije

Ovaj pristup poznat je kao modularni pristup i trebao bi se slijediti za programiranje jer je prilično učinkovit. Jedna od njegovih prednosti je ta što kada trebamo izmijeniti kôd, umjesto da promijenimo cjeloviti kôd, možemo samo izmijeniti dotičnu funkciju. Kôd za pronalaženje faktorijela broja pomoću ovog pristupa prikazan je u nastavku

#include long factorial (int num) // funkcija za izračunavanje faktorijela koja uzima cijelu vrijednost kao parametar i vraća vrijednost int tipa {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 } 

Izlaz - Faktorijal od 5 = 120

Obrazloženje-

Logika programa je ista, osim što se različita funkcija koristi za izračunavanje faktora i vraćanje vrijednosti glavnoj metodi odakle započinje izvršenje.

Faktorijal pomoću rekurzije

Rekurzija je postupak u kojem se funkcija poziva sama, a odgovarajuća funkcija naziva se rekurzivna funkcija. Sastoji se od dva dijela - osnovnog stanja i rekurzivnog poziva. Rješenje osnovnog stanja pruža se, dok se rješenje veće vrijednosti može riješiti pretvaranjem u manje vrijednosti dok se osnovno rješenje ne postigne i koristi.

Ispod je kod za pronalaženje faktora pomoću rekurzije: -

#include int fact (int) // prototip funkcije int main () {int num printf ('Unesite broj čiji faktorijel treba pronaći:') 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 } } 

Izlaz - Faktorijal od 5 = 120

Obrazloženje -Pretpostavimo da korisnik unese 5 kao ulaz, tada je u metodi main () vrijednost num 5. Kako protok ide u naredbu printf (redak 12), upućuje se poziv činjenici (5). Sada je za činjenicu (5) broj 5 što nije jednako 0, stoga tok ide u naredbu else gdje se u povratku navodi rekurzivni poziv i izrađuje činjenica (4). Postupak se ponavlja sve dok se ne postigne osnovni uvjet, tj. Dok se ne postigne num = 0 i ne vrati 1. Sada tok ide prema činjenici (1) odakle se vraća 1 (kao za činjenicu (1) num = 1) * 1 (vrijednost vraćena iz činjenica (0)). Taj se postupak ponavlja dok se ne dobije potrebna vrijednost.

Složenost vremena i prostora - ponovna V / S iteracija

Za rekurziju-

Glede složenost vremena , znamo da je faktorijel 0 jedina usporedba. Stoga je T (0) = 1. Za faktorijel bilo kojeg drugog broja postupak uključuje jednu usporedbu, jedno množenje, jedno oduzimanje i jedan poziv funkcije. Stoga

iterativni fibonacci c ++

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

Budući da znamo T (0) = 1 i za k = n, (n-k) = 0

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

Stoga je vremenska složenost koda O (n).

Glede složenost prostora, za svaki poziv stvara se stog koji će se održavati sve dok njegova vrijednost ne budeizračunato i vraćeno. Na primjer, za n = 5 morat će se održavati slijedeći stogovi

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

Kao što vidimo, 5 stogova morat će se održavati sve dok se ne postigne poziv na f (0) čija je vrijednostpoznat i vraćen je. Stoga će za n faktorijel morati održavati n stogova. Dakle, složenost prostoraje O (n). Iz gornjih slika također je vidljivo da će za n = 5, 5 snopova morati bitiodržavati. Stoga će za n faktorijel morati održavati n stogova. Stoga je složenost prostora O (n).

Za ponavljanje-

Glede složenost vremena, unutar petlje nalazi se n iteracija, stoga je vremenska složenost O (n).

Glede složenost prostora, za iterativno rješenje postoji samo jedan stog koji treba održavati i koristi se cjelobrojna varijabla. Dakle, složenost prostora je O (1).

To je sve za ovaj članak. Nadam se da ste razumjeli koncept faktora programa u C zajedno s vremenskom složenošću.

Ako naiđete na neko pitanje, slobodno postavite sva svoja pitanja u odjeljku za komentare u „faktorskom programu u C“ i naš će tim rado odgovoriti.