Faktorālā programma C: kā aprēķināt skaitļa faktorialu?



Pozitīva vesela skaitļa koeficients ir vesela skaitļa un visu zem tā esošo skaitļu reizinājums. Uzziniet, kā rakstīt faktoriālo programmu C. Piemērs: 3! = 3 * 2 * 1

Pozitīva vesela skaitļa koeficients ir vesela skaitļa un visu zem tā esošo skaitļu reizinājums, t.i., skaitļa n faktoru (ko apzīmē ar n!) Dotu ar

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





Faktoriāls 0 ir definēts kā 1, un tas nav definēts negatīviem veseliem skaitļiem. To var atrast vairākos veidos, kas uzskaitīti zemāk-

Sāksim.



Faktorālā izmantošana cilpai

Tas ir vienkāršākais un vienkāršākais veids, kā atrast skaitļa faktoriālu. Vispirms apmeklēsim kodu -

#include int main () {int I, num, fact = 1 // definējot faktoriālu kā 1, jo vismazākā vērtība ir 1 printf (“Ievadiet skaitli, lai aprēķinātu tā faktoriālo”) scanf (“% d”, & 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 }

Izeja-

Faktoriskais koeficients 5 = 120



Paskaidrojums -

kā savienot mysql datu bāzi Java

Skaitlis, kura faktoriāls ir atrodams, tiek ņemts par ievadi un tiek saglabāts mainīgajā un tiek pārbaudīts, vai tas ir negatīvs vai nē. Ja ievadītais skaitlis ir negatīvs, tiek parādīts atbilstošs ziņojums. Iepriekš faktoriālās vērtības vērtība ir 1, jo tā mazākā vērtība ir 1. For cikls tiek izpildīts pozitīviem veseliem skaitļiem (izņemot 0, kuriem testa nosacījums ir nepatiess un tādējādi fakts paliek nulle). For ciklā faktoriālā vērtība tiek reizināta ar katru veselu skaitli un tiek saglabāta secīgi, līdz tiek sasniegts ievades numurs. Piemēram, ja ievade = 5, plūsma iet uz cilpu un notiek šādas darbības -

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

Tagad 6> 5, tāpēc testa nosacījums kļūst kļūdains un cilpa tiek pārtraukta. Tiek parādīta faktoriālā vērtība.

Faktorāls, izmantojot funkcijas

Šī pieeja ir pazīstama kā modulāra pieeja, un tā jāievēro, plānojot, jo tā ir diezgan efektīva. Viena no tās priekšrocībām ir tā, ka tad, kad mums ir jāmaina kods, tad tā vietā, lai mainītu pilnu kodu, mēs varam vienkārši modificēt attiecīgo funkciju. Kods skaitļa faktoriāla atrašanai, izmantojot šo pieeju, ir parādīts zemāk

#include long factorial (int num) // funkcija faktorial aprēķināšanai, kas kā parametru ņem vesela skaitļa vērtību un atgriež int tipa vērtību {int i long fact = 1 (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 } 

Rezultāts - Faktoriskais koeficients 5 = 120

Paskaidrojums

Programmas loģika ir vienāda, izņemot to, ka faktoriāla aprēķināšanai un vērtības atgriešanai galvenajā metodē, no kuras sākas izpilde, tiek izmantota atšķirīga funkcija.

Faktorāls, izmantojot rekursiju

Rekursija ir process, kurā funkcija izsauc sevi, un atbilstošo funkciju sauc par rekursīvo funkciju. Tas sastāv no divām daļām - pamata nosacījuma un rekursīvā zvana. Tiek sniegts pamatnosacījuma risinājums, savukārt lielākas vērtības risinājumu var atrisināt, pārvēršot mazākās vērtībās, līdz tiek sasniegts un izmantots bāzes risinājums.

Zemāk ir kods faktoriāla atrašanai, izmantojot rekursiju: ​​-

#include int fact (int) // funkcijas prototips int main () {int num printf ('Ievadiet numuru, kura faktori jāatrod:') 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 } } 

Rezultāts - koeficients 5 = 120

Paskaidrojums -Pieņemsim, ka lietotājs ievada 5 kā ievadi, pēc tam galvenajā () metodē num vērtība ir 5. Kad plūsma iet paziņojumā printf (12. rinda), tiek veikta funkcija uz faktu (5). Tagad faktam (5) num ir 5, kas nav vienāds ar 0, tāpēc plūsma iet uz citu paziņojumu, kur pretī paziņojumā tiek veikts rekursīvs zvans un tiek veikts fakts (4). Process tiek atkārtots līdz pamatnosacījumam, t.i., skaitlis 0 ir sasniegts un 1 tiek atgriezts. Tagad plūsma iet uz faktu (1), no kurienes tiek atgriezta 1 (tāpat kā faktam (1) num = 1) * 1 (vērtība, kas atgriezta no fakta (0)). Šo procesu atkārto, līdz tiek iegūta vajadzīgā vērtība.

Laika un telpas sarežģītība - rekursijas V / S atkārtojums

Rekursijai-

Attiecībā uz laika sarežģītība , mēs zinām, ka faktoriālais 0 ir vienīgais salīdzinājums. Tāpēc T (0) = 1. Jebkura cita skaitļa faktoriālam procesam ir nepieciešams viens salīdzinājums, viena reizināšana, viena atņemšana un viens funkciju izsaukums. Tāpēc

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

Tā kā mēs zinām, T (0) = 1 un k = n, (n-k) = 0

Tāpēc T (n) = T (0) + 3n
= 1 + 3n

java atšķirība starp darbarīkiem un pagarinājumiem

Tāpēc koda laika sarežģītība ir O (n).

Attiecībā uz kosmosa sarežģītība, Katram zvanam tiek izveidota kaudze, kas tiks saglabāta, līdz tā vērtība būsaprēķināja un atgriezās. Piemēram, n = 5 būs jāuztur šādi skursteņi

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

Kā redzam, ka būs jāuztur 5 skursteņi, līdz tiek sasniegts zvans uz f (0), kura vērtība irzināms un tiek atgriezts. Tāpēc n faktoriālai būs jāuztur n skursteņi. Tādējādi telpas sarežģītībair O (n). No iepriekšminētajiem attēliem ir redzams arī tas, ka n = 5 gadījumā jābūt 5 kaudzēmjāuztur. Tāpēc n faktoriālai būs jāuztur n skursteņi. Tādējādi telpas sarežģītība ir O (n).

Iterācijai

Attiecībā uz laika sarežģītība, cilpas iekšpusē ir n iterācijas, tāpēc laika sarežģītība ir O (n).

Attiecībā uz kosmosa sarežģītība, iteratīvam risinājumam ir jāuztur tikai viena kaudze un tiek izmantots vesels skaitlis. Tātad telpas sarežģītība ir O (1).

Tas ir viss šajā rakstā. Es ceru, ka jūs esat sapratuši faktoriālās programmas jēdzienu C kopā ar laika sarežģītību.

Ja rodas kādi jautājumi, droši uzdodiet visus jautājumus komentāru sadaļā “Faktoriālā programma C”, un mūsu komanda ar prieku atbildēs.