Faktoriálny program v C: Ako vypočítať faktoriál čísla?



Faktoriál kladného celého čísla je produktom celého čísla a všetkých celých čísel pod ním. Naučte sa, ako napísať faktoriálny program v jazyku C. Príklad: 3! = 3 * 2 * 1

Faktoriál kladného celého čísla je súčinom celého čísla a všetkých celých čísel pod ním, t. J. Faktoriál čísla n (predstavovaný n!) Bude daný

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





Faktoriál 0 je definovaný ako 1 a nie je definovaný pre záporné celé čísla. Existuje niekoľko spôsobov, ako to nájsť, ktoré sú uvedené nižšie -

Začnime.



Faktoriál Využitie pre slučku

Je to najjednoduchší a najjednoduchší spôsob, ako nájsť faktoriál čísla. Najprv navštívime kód -

#include int main () {int I, num, fact = 1 // definovanie faktoriálu ako 1, pretože najmenšia hodnota je 1 printf („Zadajte číslo na výpočet jeho faktoriálu“) 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ýkon-

Faktoriál 5 = 120



Vysvetlenie -

ako pripojiť v jave

Číslo, ktorého faktoriál je možné nájsť, sa berie ako vstup a uloží sa do premennej a skontroluje sa, či je záporný alebo nie. Ak je celé číslo záporné, zobrazí sa príslušná správa. Hodnota faktoriálu je preddefinovaná na 1, pretože jeho najmenšia hodnota je 1. Smyčka for sa vykoná pre kladné celé čísla (okrem 0, pre ktoré je testovacia podmienka nepravdivá, a teda skutočnosť zostáva nulová). V cykle for sa hodnota faktoriálu znásobí s každým celým číslom a uloží sa postupne, až kým sa nedosiahne vstupné číslo. Napríklad pre vstup = 5 ide tok do cyklu for a uskutočnia sa nasledujúce kroky -

skutočnosť = 1, i = 1 -> skutočnosť = 1 * 1 = 1 -> i = 2
fakt = 1, i = 2 -> fakt = 1 * 2 = 2 -> i = 3
skutočnosť = 2, i = 3 -> skutočnosť = 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

Teraz 6> 5, preto sa podmienka testu stane nepravdivou a slučka sa ukončí. Zobrazí sa hodnota faktoriálu.

Faktoriál pomocou funkcií

Tento prístup je známy ako modulárny prístup a pri programovaní by sa mal dodržiavať, pretože je dosť efektívny. Jednou z jeho výhod je, že keď potrebujeme vykonať zmeny v kóde, potom namiesto zmeny celého kódu môžeme iba upraviť príslušnú funkciu. Kód na vyhľadanie faktoriálu čísla pomocou tohto prístupu je uvedený nižšie

#include long factororial (int num) // funkcia na výpočet faktoriálu, ktorá berie ako parameter celočíselnú hodnotu a vracia hodnotu typu 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 } 

Výkon - Faktoriál 5 = 120

Vysvetlenie-

Logika programu je rovnaká, až na to, že na výpočet faktoriálu a vrátenie hodnoty do hlavnej metódy, odkiaľ začína vykonávanie, sa používa iná funkcia.

Faktoriál pomocou rekurzie

Rekurzia je proces, pri ktorom sa funkcia nazýva sama a zodpovedajúca funkcia sa nazýva rekurzívna funkcia. Skladá sa z dvoch častí - základnej podmienky a rekurzívneho volania. Riešenie základného stavu je poskytnuté, zatiaľ čo riešenie väčšej hodnoty je možné vyriešiť prevedením na menšie hodnoty, kým sa nedosiahne a nepoužije základné riešenie.

Nižšie je uvedený kód na vyhľadanie faktoriálu pomocou rekurzie: -

#include int fact (int) // function prototype int main () {int num printf ('Zadajte číslo, ktorého faktoriál sa má nájsť:') 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ýkon - Faktoriál 5 = 120

najlepšia java ide pre začiatočníkov

Vysvetlenie -Predpokladajme, že užívateľ zadá 5 ako vstup, potom v metóde main () je hodnota num 5. Keď bude postup prebiehať v príkaze printf (riadok 12), bude uskutočnená funkcia volania na skutočnosť (5). Teraz pre skutočnosť (5) num je 5, ktoré sa nerovná 0, preto tok ide do príkazu else, kde sa vo vyhlásení return uskutoční rekurzívne volanie a urobí sa skutočnosť (4). Proces sa opakuje, kým sa nedosiahne základná podmienka, t. J. Num = 0 a vráti sa 1. Teraz ide tok na skutočnosť (1), odkiaľ sa vráti 1 (čo sa týka skutočnosti (1) num = 1) * 1 (hodnota vrátená z faktu (0)). Tento postup sa opakuje, kým sa nedosiahne požadovaná hodnota.

Časová a priestorová zložitosť - rekurzia V / S iterácia

Na rekurziu

Čo sa týka časová zložitosť , vieme, že faktoriál 0 je jediné porovnanie. Preto T (0) = 1. Pre faktoriál ľubovoľného iného čísla proces zahrnuje jedno porovnanie, jedno násobenie, jedno odčítanie a jedno volanie funkcie. Preto

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

Pretože poznáme T (0) = 1 a pre k = n, (n-k) = 0

nájsť dĺžku poľa javascript

Preto T (n) = T (0) + 3n
= 1 + 3n

Preto je časová zložitosť kódu O (n).

Čo sa týka zložitosť priestoru, pre každý hovor sa vytvorí zásobník, ktorý sa zachová, kým nie je jeho hodnotavypočítané a vrátené. Napríklad pre n = 5 bude treba zachovať nasledujúce komíny

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

Ako vidíme, bude treba udržiavať 5 zásobníkov, kým sa nedosiahne volanie f (0), ktorého hodnota jeznámy a je vrátený. Preto pre n faktoriál bude treba zachovať n komínov. Teda priestorová zložitosťje O (n). Z vyššie uvedených obrázkov je tiež zrejmé, že pre n = 5 bude musieť byť 5 stackovudržiavané. Preto pre n faktoriál bude treba zachovať n komínov. Komplexnosť priestoru je teda O (n).

Na iteráciu

Čo sa týka časová zložitosť, vo vnútri slučky je n iterácií, takže časová zložitosť je O (n).

Čo sa týka zložitosť priestoru, pre iteračné riešenie existuje iba jeden zásobník, ktorý je potrebné udržiavať, a použije sa celočíselná premenná. Takže vesmírna zložitosť je O (1).

To je pre tento článok všetko. Dúfam, že ste pochopili koncept faktoriálneho programu v jazyku C spolu s časovou zložitosťou.

Ak narazíte na akékoľvek otázky, neváhajte sa ich opýtať v sekcii komentárov „faktoriálneho programu v jazyku C“ a náš tím na ne rád odpovie.