Factorieel programma in C: hoe factorieel van een getal berekenen?



Factorieel van een positief geheel getal is het product van een geheel getal en alle gehele getallen eronder. Leer hoe u een faculteitsprogramma schrijft in C. Voorbeeld: 3! = 3 * 2 * 1

Factorieel van een positief geheel getal is het product van een geheel getal en alle gehele getallen eronder, d.w.z. de faculteit van getal n (vertegenwoordigd door n!) Zou worden gegeven door

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





mysql tutorial voor beginners met voorbeelden

De faculteit van 0 wordt gedefinieerd als 1 en is niet gedefinieerd voor negatieve gehele getallen. Er zijn meerdere manieren om het te vinden, die hieronder worden vermeld:

Laten we beginnen.



Factorial gebruiken For Loop

Het is de gemakkelijkste en eenvoudigste manier om de faculteit van een getal te vinden. Laten we eerst de code bezoeken -

#include int main () {int I, num, fact = 1 // faculteit definiëren als 1 aangezien de kleinste waarde 1 is printf ('Voer een getal in om de faculteit te berekenen') 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 }

Uitgang

Factoriaal van 5 = 120



Uitleg -

Het getal waarvan de faculteit moet worden gevonden, wordt als invoer genomen en opgeslagen in een variabele en gecontroleerd of het negatief is of niet. Als het ingevoerde gehele getal negatief is, wordt het betreffende bericht weergegeven. De waarde van faculteit is vooraf gedefinieerd als 1, aangezien de kleinste waarde 1 is. De for-lus wordt uitgevoerd voor positieve gehele getallen (behalve voor 0 waarvoor de testvoorwaarde onwaar is en het feit dus nul blijft). In de for-lus wordt de waarde van faculteit vermenigvuldigd met elk geheel getal en opeenvolgend opgeslagen totdat het invoergetal is bereikt. Bijvoorbeeld, voor input = 5, gaat de stroom naar for lus en vinden de volgende stappen plaats-

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

Nu 6> 5, daarom wordt de testconditie onwaar en wordt de lus beëindigd. De waarde van faculteit wordt weergegeven.

Factorial gebruik van functies

Deze benadering staat bekend als een modulaire benadering en moet worden gevolgd voor het programmeren, aangezien deze vrij efficiënt is. Een van de voordelen is dat wanneer we wijzigingen in de code moeten aanbrengen, we in plaats van de volledige code te wijzigen, gewoon de betreffende functie kunnen wijzigen. De code voor het vinden van de faculteit van een getal met behulp van deze benadering wordt hieronder weergegeven

#include long factorial (int num) // functie voor het berekenen van faculteit die een geheel getal als parameter neemt en een int-type waarde retourneert {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 } 

Uitvoer - Factoriaal van 5 = 120

Uitleg-

De logica voor het programma is hetzelfde, behalve dat een andere functie wordt gebruikt om de faculteit te berekenen en de waarde terug te sturen naar de hoofdmethode van waaruit de uitvoering begint.

Factorial met behulp van recursie

Recursie is het proces waarin een functie zichzelf aanroept en de overeenkomstige functie wordt recursieve functie genoemd. Het bestaat uit twee delen: een basisvoorwaarde en een recursieve oproep. De oplossing voor de basisconditie wordt geboden, terwijl de oplossing voor de grotere waarde kan worden opgelost door naar kleinere waarden te converteren totdat de basisoplossing is bereikt en gebruikt.

Hieronder staat de code voor het vinden van faculteit met recursie: -

#include int fact (int) // function prototype int main () {int num printf ('Voer het nummer in waarvan de faculteit moet worden gevonden:') 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 } } 

Uitvoer - Factoriaal van 5 = 120

Uitleg -Stel dat de gebruiker 5 invoert als invoer, dan is in de methode main () de waarde van num 5. Naarmate de stroom vordert in de printf-instructie (regel 12), wordt de functie feit (5) aangeroepen. Nu voor feit (5) num is 5 wat niet gelijk is aan 0, daarom gaat de stroom naar de else-instructie waar in ruilinstructie een recursieve aanroep wordt gedaan en feit (4) wordt gedaan. Het proces wordt herhaald totdat de basisvoorwaarde, d.w.z. num = 0, is bereikt en 1 wordt geretourneerd. Nu gaat de stroom naar feit (1) vanwaar 1 (voor feit (1) num = 1) * 1 (waarde geretourneerd van feit (0)) wordt geretourneerd. Dit proces wordt herhaald totdat de vereiste waarde is bereikt.

Time & Space Complexity - Recursion V / S iteratie

Voor recursie

Betreffende tijd complexiteit weten we dat faculteit 0 de enige vergelijking is. Daarom T (0) = 1. Voor faculteiten van elk ander getal omvat het proces één vergelijking, één vermenigvuldiging, één aftrekking en één functieaanroep. Daarom

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

wat is bijvoorbeeld in java

Omdat we T (0) = 1 kennen en voor k = n, (n-k) = 0

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

Daarom is de tijdcomplexiteit van de code O (n).

Betreffende ruimte complexiteit, er wordt een stapel gemaakt voor elke oproep die wordt gehandhaafd totdat de waarde ervan isberekend en geretourneerd. Voor n = 5 moeten bijvoorbeeld de volgende stapels worden bijgehouden

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

Zoals we kunnen zien, zullen 5 stacks moeten worden aangehouden totdat een aanroep naar f (0) wordt bereikt waarvan de waarde isbekend en wordt geretourneerd. Daarom zullen voor n faculteit n stapels moeten worden gehandhaafd. Complexiteit van de ruimte dusstaat aan). Uit bovenstaande plaatjes blijkt ook dat voor n = 5 er 5 stapels moeten zijngehandhaafd. Daarom zullen voor n faculteit n stapels moeten worden gehandhaafd. Ruimtecomplexiteit is dus O (n).

Voor iteratie-

Betreffende tijd complexiteit, er zijn herhalingen binnen de lus, daarom is de tijdcomplexiteit O (n).

Betreffende ruimte complexiteit, voor een iteratieve oplossing is er slechts één stapel die moet worden onderhouden en wordt een integer-variabele gebruikt. Dus de ruimtecomplexiteit is O (1).

Dat is alles voor dit artikel. Ik hoop dat je het concept van het faculteitsprogramma in C en de tijdcomplexiteit hebt begrepen.

Mocht je vragen tegenkomen, stel dan gerust al je vragen in het commentaargedeelte van 'faculteitsprogramma in C' en ons team zal je graag beantwoorden.