C의 팩토리얼 프로그램 : 숫자의 팩토리얼을 계산하는 방법?



양의 정수의 계승은 정수와 그 아래의 모든 정수의 곱입니다. C로 팩토리얼 프로그램을 작성하는 방법을 배웁니다. 예 : 3! = 3 * 2 * 1

양의 정수의 계승은 정수와 그 아래의 모든 정수의 곱입니다. 즉, 숫자 n의 계승 (n!로 표시)은 다음과 같이 주어집니다.

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





계승 0은 1로 정의되며 음의 정수에 대해서는 정의되지 않습니다. 아래에 나열된 여러 가지 방법이 있습니다.

시작하자.



For 루프를 사용한 팩토리얼

숫자의 계승을 찾는 가장 쉽고 간단한 방법입니다. 먼저 코드를 살펴 보겠습니다.

#include int main () {int I, num, fact = 1 // 최소값이 1이므로 계승을 1로 정의 printf (“계승을 계산할 숫자를 입력하십시오”) 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 }

산출-

5의 계승 = 120



Java에서 hashmap과 hashtable의 차이점

설명 -

계승을 찾을 숫자를 입력으로 가져와 변수에 저장하고 음수인지 아닌지 확인합니다. 입력 된 정수가 음수이면 적절한 메시지가 표시됩니다. 팩토리얼의 값은 최소값이 1이므로 1로 미리 정의됩니다. for 루프는 양의 정수에 대해 실행됩니다 (테스트 조건이 거짓이므로 팩트가 0으로 유지되는 0 제외). for 루프에서 계승의 값은 각 정수와 곱해지며 입력 번호에 도달 할 때까지 연속적으로 저장됩니다. 예를 들어 입력 = 5의 경우 흐름은 for 루프로 이동하고 다음 단계가 발생합니다.

사실 = 1, i = 1 –> 사실 = 1 * 1 = 1 –> i = 2
사실 = 1, i = 2 –> 사실 = 1 * 2 = 2 –> i = 3
사실 = 2, i = 3 –> 사실 = 2 * 3 = 6 –> i = 4
사실 = 6, i = 4 –> 사실 = 6 * 4 = 24 –> i = 5
사실 = 24, i = 5 –> 사실 = 24 * 5 = 120 –> i = 6

이제 6> 5이므로 테스트 조건이 거짓이되고 루프가 종료됩니다. 계승 값이 표시됩니다.

함수를 사용한 팩토리얼

이 접근 방식은 모듈 식 접근 방식으로 알려져 있으며 매우 효율적이므로 프로그래밍시 따라야합니다. 장점 중 하나는 코드를 변경해야 할 때 전체 코드를 변경하는 대신 관련 함수를 수정할 수 있다는 것입니다. 이 접근법을 사용하여 숫자의 계승을 찾는 코드는 다음과 같습니다.

#include long factorial (int num) // 정수 값을 매개 변수로 사용하고 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 } 

산출 - 5의 계승 = 120

설명-

프로그램의 논리는 팩토리얼을 계산하고 실행이 시작되는 기본 메서드로 값을 반환하는 데 다른 함수가 사용된다는 점을 제외하면 동일합니다.

재귀를 사용한 팩토리얼

재귀는 함수가 자신을 호출하고 해당 함수를 재귀 함수라고하는 프로세스입니다. 기본 조건과 재귀 호출의 두 부분으로 구성됩니다. 기본 조건에 대한 솔루션이 제공되고 더 큰 값에 대한 솔루션은 기본 솔루션에 도달하여 사용될 때까지 더 작은 값으로 변환하여 해결할 수 있습니다.

다음은 재귀를 사용하여 계승을 찾는 코드입니다.

동적 웹 페이지를 만드는 방법
#include int fact (int) // function prototype int main () {int num printf ( 'Enter the number which factorial is to be find :') 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 } } 

산출 – 5의 계승 = 120

설명 -사용자가 입력으로 5를 입력하고 main () 메서드에서 num의 값이 5라고 가정합니다. 흐름이 ​​printf 문 (12 행)으로 이동함에 따라 fact (5) 함수가 호출됩니다. 이제 fact (5) num은 0이 아닌 5이므로 return 문에서 재귀 호출이 만들어지고 fact (4)가 만들어지는 else 문으로 흐름이 이동합니다. 프로세스는 기본 조건, 즉 num = 0에 도달하고 1이 반환 될 때까지 반복됩니다. 이제 흐름은 1 (팩트 (1)의 경우 num = 1) * 1 (팩트 (0)에서 반환 된 값)이 반환되는 사실 (1)로 이동합니다. 이 프로세스는 필요한 값을 얻을 때까지 반복됩니다.

시간 및 공간 복잡성 – 재귀 V / S 반복

재귀의 경우

에 관해서 시간 복잡성 , 우리는 계승 0이 유일한 비교라는 것을 알고 있습니다. 따라서 T (0) = 1입니다. 다른 숫자의 계승에 대해 프로세스는 하나의 비교, 하나의 곱셈, 하나의 빼기 및 하나의 함수 호출을 포함합니다. 따라서

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

T (0) = 1이고 k = n 인 경우 (n-k) = 0

따라서 T (n) = T (0) + 3n
= 1 + 3n

따라서 코드의 시간 복잡도는 O (n)입니다.

에 관해서 공간 복잡성, 값이 될 때까지 유지되는 각 호출에 대해 스택이 생성됩니다.계산되고 반환됩니다. 예를 들어 n = 5의 경우 다음 스택을 유지해야합니다.

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

우리가 볼 수 있듯이 값이 다음과 같은 f (0)에 대한 호출에 도달 할 때까지 5 개의 스택이 유지되어야합니다.알려지고 반환됩니다. 따라서 n 팩토리얼의 경우 n 스택이 유지되어야합니다. 따라서 공간 복잡성O (n)입니다. 또한 위의 그림에서 n = 5의 경우 5 개의 스택이유지. 따라서 n 팩토리얼의 경우 n 스택이 유지되어야합니다. 따라서 공간 복잡도는 O (n)입니다.

반복 용

에 관해서 시간 복잡성, 루프 내부에는 n 개의 반복이 있으므로 시간 복잡도는 O (n)입니다.

에 관해서 공간 복잡성, 반복 솔루션의 경우 유지 관리해야하는 스택이 하나 뿐이며 정수 변수가 사용됩니다. 따라서 공간 복잡성은 O (1)입니다.

이게 다입니다. 시간의 복잡성과 함께 C의 팩토리얼 프로그램의 개념을 이해 하셨기를 바랍니다.

질문이 있으시면 'C의 팩토리얼 프로그램'의 댓글 섹션에있는 모든 질문에 자유롭게 질문하시면 저희 팀이 기꺼이 답변 해 드리겠습니다.