Faktoriální program v C: Jak vypočítat faktoriál čísla?



Faktoriál kladného celého čísla je součinem celého čísla a všech celých čísel pod ním. Naučte se psát faktoriální program v C. Příklad: 3! = 3 * 2 * 1

Faktoriál kladného celého čísla je součinem celého čísla a všech celých čísel pod ním, tj. Faktoriál čísla n (představovaný n!) Bude dán vztahem

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





Faktoriál 0 je definován jako 1 a není definován pro záporná celá čísla. Existuje několik způsobů, jak to najít, které jsou uvedeny níže -

Začněme.



Faktoriál použití pro smyčku

Je to nejjednodušší a nejjednodušší způsob, jak najít faktoriál čísla. Nejprve navštivte kód -

#include int main () {int I, num, fact = 1 // definování faktoriálu jako 1, protože nejmenší hodnota je 1 printf („Zadejte číslo pro 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ýstup-

Faktoriál 5 = 120



Vysvětlení -

java rozdíl mezi extends a implementuje

Číslo, jehož faktoriál se má najít, se bere jako vstup a uloží se do proměnné a zkontroluje se, zda je záporné nebo ne. Pokud je celé číslo záporné, zobrazí se příslušná zpráva. Hodnota faktoriálu je předdefinována na 1, protože jeho nejmenší hodnota je 1. Smyčka for je prováděna pro kladná celá čísla (kromě 0, pro které je testovací podmínka nepravdivá a fakt tedy zůstává nulový). Ve smyčce for je hodnota faktoriálu vynásobena každým celým číslem a ukládána postupně, dokud není dosaženo vstupního čísla. Například pro vstup = 5 jde tok do smyčky for a proběhnou následující kroky -

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

Nyní 6> 5, proto se testovací podmínka stane nepravdivou a smyčka je ukončena. Zobrazí se hodnota faktoriálu.

Faktoriál pomocí funkcí

Tento přístup je známý jako modulární přístup a měl by být použit při programování, protože je docela efektivní. Jednou z jeho výhod je, že když potřebujeme provést změny v kódu, pak místo změny celého kódu můžeme pouze upravit příslušnou funkci. Kód pro vyhledání faktoriálu čísla pomocí tohoto přístupu je uveden níže

#include long factororial (int num) // funkce pro výpočet faktoriálu, která jako parametr vezme celočíselnou hodnotu a vrátí 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ýstup - Faktoriál 5 = 120

Vysvětlení-

Logika programu je stejná s tím rozdílem, že se k výpočtu faktoriálu a vrácení hodnoty hlavní metodě, odkud začíná provádění, používá jiná funkce.

Faktoriál pomocí rekurze

Rekurze je proces, při kterém se funkce volá sama a odpovídající funkce se nazývá rekurzivní funkce. Skládá se ze dvou částí - základní podmínky a rekurzivního volání. Řešení základního stavu je poskytnuto, zatímco řešení větší hodnoty lze vyřešit převedením na menší hodnoty, dokud není dosaženo a použito základní řešení.

Níže je uveden kód pro vyhledání faktoriálu pomocí rekurze: -

#include int fact (int) // function prototype int main () {int num printf ('Zadejte číslo, jehož faktoriál má být nalezen:') 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ýstup - Faktoriál 5 = 120

nejlepší java ide pro začátečníky

Vysvětlení -Předpokládejme, že uživatel zadá 5 jako vstup, pak v metodě main () je hodnota num 5. Jak tok plyne v příkazu printf (řádek 12), provede se volání funkce fact (5). Nyní pro fakt (5) num je 5, které se nerovná 0, proto tok jde do příkazu else, kde se v příkazu return provede rekurzivní volání a provede se fakt (4). Proces se opakuje, dokud se nedosáhne základní podmínky, tj. Num = 0 a vrátí se 1. Nyní jde tok na fakt (1), odkud se vrátí 1 (pokud jde o fakt (1) num = 1) * 1 (hodnota vrácená z faktu (0)). Tento proces se opakuje, dokud se nedosáhne požadované hodnoty.

Složitost času a prostoru - rekurze V / S iterace

Pro rekurzi

Ohledně časová složitost , víme, že faktoriál 0 je jediné srovnání. Proto T (0) = 1. Pro faktoriál jakéhokoli jiného čísla proces zahrnuje jedno srovnání, jedno násobení, jedno odčítání a jedno volání funkce. Proto

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

Protože známe T (0) = 1 a pro k = n, (n-k) = 0

najít délku pole javascript

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

Proto je časová složitost kódu O (n).

Ohledně složitost prostoru, pro každé volání je vytvořen zásobník, který bude udržován, dokud nebude jeho hodnotavypočítal a vrátil se. Například pro n = 5 bude nutné udržovat následující zásobníky

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

Jak vidíme, bude potřeba udržovat 5 zásobníků, dokud nebude dosaženo volání f (0), jehož hodnota jeznámé a je vráceno. Proto pro n faktoriál bude nutné udržovat n komínů. Tedy prostorová složitostje O (n). Z výše uvedených obrázků je také zřejmé, že pro n = 5 bude muset být 5 stackůudržovaný. Proto pro n faktoriál bude nutné udržovat n komínů. Složitost prostoru je tedy O (n).

Pro iteraci

Ohledně časová složitost, uvnitř smyčky je n iterací, proto je časová složitost O (n).

Ohledně složitost prostoru, pro iterativní řešení existuje pouze jeden zásobník, který je třeba udržovat, a použije se celočíselná proměnná. Takže prostorová složitost je O (1).

To je pro tento článek vše. Doufám, že jste pochopili koncept faktoriálního programu v C spolu s časovou složitostí.

Pokud narazíte na jakékoli otázky, neváhejte se zeptat na všechny své dotazy v sekci komentářů „faktoriálního programu v C“ a náš tým vám rád odpoví.