Факторски програм у Ц: Како израчунати факторијел броја?



Факторијал позитивног целог броја је умножак целог броја и свих целих бројева испод њега. Научите како да пишете факторски програм на Ц. Пример: 3! = 3 * 2 * 1

Факторијал позитивног целог броја је умножак целог броја и свих целих бројева испод њега, тј. Факторијел броја н (представљен са н!) Дао би

како применити Јава апликацију у авс

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





Факторијал од 0 дефиниран је као 1 и није дефиниран за негативне цијеле бројеве. Постоји више начина за проналажење који су наведени у наставку -

Хајде да почнемо.



Факторијално коришћење за петљу

То је најлакши и најједноставнији начин да се пронађе факторијел броја. Прво да посетимо код -

#инцлуде инт маин () {инт И, нум, фацт = 1 // дефинишући факторијел као 1 јер је најмања вредност 1 принтф („Унесите број за израчунавање његовог факторијела“) сцанф („% д“, & нум) иф (нум<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 }

Оутпут-

Факторијал од 5 = 120



Објашњење -

Број чији факторијел треба пронаћи узима се за улаз и чува у променљивој и проверава се да ли је негативан или не. Ако је унети цео број негативан, приказује се одговарајућа порука. Вредност фактора је унапред дефинисана као 1, јер је његова најмања вредност 1. Петља фор се извршава за позитивне целе бројеве (осим за 0 за које је услов испитивања нетачан и тиме чињеница остаје нула). У петљи фор, вредност фактора се множи са сваким целим бројем и узастопно чува док се не постигне улазни број. На пример, за инпут = 5, ток иде у фор лооп и следе следећи кораци-

чињеница = 1, и = 1 -> чињеница = 1 * 1 = 1 -> и = 2
чињеница = 1, и = 2 -> чињеница = 1 * 2 = 2 -> и = 3
чињеница = 2, и = 3 -> чињеница = 2 * 3 = 6 -> и = 4
чињеница = 6, и = 4 -> чињеница = 6 * 4 = 24 -> и = 5
чињеница = 24, и = 5 -> чињеница = 24 * 5 = 120 -> и = 6

Сада је 6> 5, стога услов испитивања постаје нетачан и петља се прекида. Приказана је вредност фактора.

шта је курс науке о подацима

Факторијално коришћење функција

Овај приступ је познат као модуларни приступ и треба га следити за програмирање, јер је прилично ефикасан. Једна од његових предности је та што када треба да извршимо промене у коду, уместо да променимо комплетни код, можемо само изменити дотичну функцију. Шифра за проналажење факторијела броја помоћу овог приступа приказана је у наставку

#инцлуде лонг фацториал (инт нум) // функција за израчунавање факторијела која узима цијелу вриједност као параметар и враћа вриједност инт типа {инт и лонг фацт = 1 фор (и = 1 и<= 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 } 

Оутпут - Факторијал од 5 = 120

Објашњење-

Логика програма је иста, осим што се различита функција користи за израчунавање фактора и враћање вредности главној методи одакле започиње извршење.

Факторијал користећи рекурзију

Рекурзија је процес у којем се функција позива, а одговарајућа функција се назива рекурзивна функција. Састоји се из два дела - основног стања и рекурзивног позива. Решење основног стања је обезбеђено, док се решење веће вредности може решити претварањем у мање вредности док се основно решење не постигне и искористи.

Испод је код за проналажење факторијела помоћу рекурзије: -

#инцлуде инт фацт (инт) // прототип функције инт маин () {инт нум принтф ('Унесите број чији факторијел треба пронаћи:') сцанф ('% д', & нум) иф (нум<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 } } 

Оутпут - Факторијал од 5 = 120

Објашњење -Претпоставимо да корисник унесе 5 као улаз, онда је у методи маин () вредност нум 5. Када проток иде у наредбу принтф (ред 12), врши се позив на чињеницу (5). Сада је за чињеницу (5) нум 5, што није једнако 0, стога ток иде у наредбу елсе где се у повратној изјави врши рекурзивни позив и врши чињеница (4). Процес се понавља све док се не постигне основни услов, тј. Нум = 0 и врати се 1. Сада ток иде ка чињеници (1) одакле се враћа 1 (као за чињеницу (1) нум = 1) * 1 (вредност враћена из чињеница (0)). Овај поступак се понавља све док се не добије потребна вредност.

Сложеност времена и простора - поновна В / С итерација

Фор Рецурсион-

У погледу сложеност времена , знамо да је факторијел 0 једино поређење. Стога је Т (0) = 1. За факторијел било ког другог броја процес укључује једно поређење, једно множење, једно одузимање и један позив функције. Према томе

Т (н) = Т (н-1) +3
= Т (н-2) +6
= Т (н-3) +9
= & хеллип.
= Т (н-к) + 3к

Пошто знамо Т (0) = 1 и за к = н, (н-к) = 0

Стога је Т (н) = Т (0) + 3н
= 1 + 3н

Стога је временска сложеност кода О (н).

У погледу сложеност простора, за сваки позив се ствара стек који ће се одржавати све док његова вредност не будеизрачунато и враћено. На пример, за н = 5 мораће се одржавати следећи стекови

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

Као што видимо, 5 стекова мораће се одржавати све док се не постигне позив на ф (0) чија је вредностпознат и враћен је. Стога ће за н факторијел морати да се одржава н стекова. Тако свемирска сложеностје О (н). Такође је видљиво из горњих слика да ће за н = 5, 5 снопова бити потребноодржава. Стога ће за н факторијел морати да се одржава н стекова. Стога је сложеност простора О (н).

Фор Итератион-

У погледу сложеност времена, унутар петље постоји н итерација, стога је временска сложеност О (н).

У погледу сложеност простора, за итеративно решење постоји само један стек који треба одржавати и користи се целобројна променљива. Дакле, сложеност простора је О (1).

То је све за овај чланак. Надам се да сте разумели концепт факторског програма на Ц заједно са временском сложеношћу.

како користити гото у ц ++-у

Ако наиђете на неко питање, слободно поставите сва своја питања у одељку за коментаре „факторског програма на Ц“ и наш тим ће вам радо одговорити.