Faktorprogram i C: Hur man beräknar ett faktors fakturor?



Faktor för ett positivt heltal är produkten av ett heltal och alla heltal under det. Lär dig att skriva ett faktorprogram i C. Exempel: 3! = 3 * 2 * 1

Faktor för ett positivt heltal är produkten av ett heltal och alla heltal under det, dvs faktumet för tal n (representerat av n!) Skulle ges av

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





hur man skapar singleton-klass i java

Faktorn 0 är definierad som 1 och definieras inte för negativa heltal. Det finns flera sätt att hitta det som listas nedan-

Låt oss börja.



Faktor som använder för loop

Det är det enklaste och enklaste sättet att hitta ett nummer på ett nummer. Låt oss först besöka koden -

#include int main () {int I, num, fact = 1 // definierar faktor som 1 eftersom minst värde är 1 printf ('Ange ett tal för att beräkna dess faktoria') scanf ('% d', & num) om (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 }

Produktion-

Faktor 5 = 120



Förklaring -

Numret vars faktoria finns kan tas som inmatning och lagras i en variabel och kontrolleras om det är negativt eller inte. Om det angivna heltalet är negativt visas lämpligt meddelande. Värdet på faktor är fördefinierat till 1 eftersom det minsta värdet är 1. For-slingan exekveras för positiva heltal (förutom 0 för vilken testvillkor är falskt och därmed faktum förblir noll). I for-slingan multipliceras fakturavärdet med varje heltal och lagras successivt tills ingångsnumret nås. Till exempel, för input = 5, går flödet till for loop och följande steg äger rum -

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

Nu 6> 5 blir därför testvillkoret falskt och slingan avslutas. Värdet på faktoria visas.

Fabriksfunktioner

Detta tillvägagångssätt är känt som ett modulärt tillvägagångssätt och bör följas för programmering eftersom det är ganska effektivt. En av dess fördelar är att när vi behöver göra ändringar i koden kan vi bara ändra den berörda funktionen istället för att ändra hela koden. Koden för att hitta ett faktors nummer med detta tillvägagångssätt visas nedan

#include long factorial (int num) // -funktion för beräkning av faktoria som tar ett heltal som parameter och returnerar ett int-typvärde {int i long fact = 1 för (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 } 

Produktion - Faktor 5 = 120

Förklaring-

Programmets logik är densamma förutom att en annan funktion används för att beräkna faktoria och returnera värdet till huvudmetoden varifrån körningen börjar.

Faktor med användning av rekursion

Rekursion är den process där en funktion kallar sig själv och motsvarande funktion kallas rekursiv funktion. Den består av två delar - ett basvillkor och ett rekursivt samtal. Lösningen till basförhållandet tillhandahålls medan lösningen till det större värdet kan lösas genom att konvertera till mindre värden tills baslösningen nås och används.

Nedan följer koden för att hitta faktoria med rekursion: -

#include int fact (int) // function prototype int main () {int num printf ('Ange numret vars faktoria är att hitta:') 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 } } 

Produktion - Faktor 5 = 120

Förklaring -Antag att användaren matar in 5 som inmatning, då i huvud () -metoden är värdet num 5. När flödet går i printf-uttalandet (rad 12) görs en call to fact (5) -funktion. Nu är faktum (5) num 5 som inte är lika med 0, därför går flödet till det andra uttalandet där i returuttalandet görs ett rekursivt samtal och faktum (4) görs. Processen upprepas tills basförhållandet, dvs num = 0 uppnås och 1 returneras. Nu går flödet till fakta (1) varifrån 1 (som för faktum (1) num = 1) * 1 (värde som returneras från faktum (0)) returneras. Denna process upprepas tills önskat värde uppnås.

Time & Space Complexity - Rekursion V / S iteration

För rekursion-

Angående tidskomplexitet , vi vet att faktor 0 är den enda jämförelsen. Därför är T (0) = 1. För fakturor för vilket annat nummer som helst innefattar processen en jämförelse, en multiplikation, en subtraktion och ett funktionsanrop. Därför

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

Eftersom vi vet att T (0) = 1 och för k = n, (n-k) = 0

Därför T (n) = T (0) + 3n
= 1 + 3n

Därför är kodens tidskomplexitet O (n).

Angående rymdkomplexitet, en stack skapas för varje samtal som kommer att bibehållas tills dess värde ärberäknas och returneras. Till exempel för n = 5 måste följande stackar bibehållas

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

Som vi kan se att 5 stackar måste behållas tills ett samtal till f (0) uppnås vars värde ärkänd och returneras. Därför måste n staplar underhållas i n faktoria. Således rymdkomplexitetär O (n). Det framgår också av ovanstående bilder att för n = 5 måste 5 stackar varaupprätthålls. Därför måste n staplar underhållas i n faktoria. Således är rymdkomplexitet O (n).

För Iteration-

Angående tidskomplexitet, det finns n iterationer inuti slingan, därför är tidskomplexiteten O (n).

Angående rymdkomplexitet, för iterativ lösning finns det bara en stack som behöver underhållas och en heltalvariabel används. Så rymdkomplexiteten är O (1).

Det är allt för den här artikeln. Jag hoppas att du har förstått begreppet faktorprogrammet i C tillsammans med tidskomplexiteten.

Om du stöter på några frågor är du välkommen att ställa alla dina frågor i kommentarfältet i 'faktorprogram i C' så svarar vårt team gärna.