요즘 수치해석학을 공부하고 있습니다
아무래도 수치모델을 전공하려 하다보니 필요해보이더군요
그래서 당분간 제가 공부하는 책에서 나오는 공식들을 라이브러리 사용 없이 파이썬으로 구현해보려고 합니다
그 첫번째로 정말 간단한 것부터 출발해보겠습니다
오늘은 팩토리얼 구현을 해보겠습니다
먼저 팩토리얼에 대해서 간단하게 알아보겠습니다
팩토리얼은 우리말로 계승이라는 뜻입니다
위키백과의 정의로는
"수학에서, 자연수의 계승 또는 팩토리얼은 그 수보다 작거나 같은 모든 양의 정수의 곱이다" 라고 나와있습니다
수학적 기호로는 숫자 뒤에 느낌표를 붙여서 사용합니다
5의 계승 또는 5 팩토리얼은 5보다 작거나 같은 모든 양의 수 즉, 1, 2, 3, 4, 5 5가지 숫자의 곱을 의미합니다
여기서 하나 알 수 있는건 팩토리얼을 구현할 때 1부터 내가 계승을 구하고 싶은 숫자까지 순서대로 곱하면 되겠구나를
알 수 있습니다
바로 구현해볼까요??
저는 2가지 방식을 사용했습니다
첫 번째 방식은 for 반복문을 이용한 코드입니다
함수의 형태로 숫자를 입력하면 그에 해당하는 팩토리얼 값을 구해주는 형식입니다
def fac(n):
result = 1
for i in np.arange(1, n+1, 1):
result *= i
print(result)
fac(5)
=> 120
이렇게 잘 구현이 된 모습입니다
*= 은 할당 연산자로 왼쪽 변수의 값과 오른쪽 변수의 값을 곱하고
곱해진 결과값을 다시 왼쪽 변수에 할당하는 연산자입니다
그러니까 생각해보면 1이란 숫자가 반복 루트를 지나갈 때 result의 값인 1과 첫 반복 숫자인 1이 곱해지고
1x1을 통해 만들어진 1이 다시 result로 재할당이 됩니다
두 번째 방법은 재귀함수를 사용하는 법입니다
재귀 함수는 쉽게 생각하면 반복문이 없이 자기 자신을 계속 호출하는 방법으로 반복문처럼 쓴다고 생각하시면 됩니다
def fac2(n):
if(n > 1):
return n * fac2(n - 1)
else:
return 1
fac2(5)
=> 120
비슷한 것 같지만 조금 모양이 다르죠??
만약 함수에 주어진 값이 1보다 크면 원래 자신 값과 그보다 1 낮은 값을 돌려주고
1보다 작거나 같을 경우 1을 돌려줍니다
재귀 함수를 사용할 때는 항상 종료 조건이 필요하지만 이 식의 경우는 필요가 없습니다
1보다 작거나 같은 값들 0도 있고 음수 값들도 존재하지만 이 값들에 대해서는 모두 1의 값을 반환하기 때문에
종료 조건을 따로 지정해주지 않아도 됩니다
지금까지 사용한 두 가지 방법은 너무 큰 수는 계산이 불가능합니다
정말정말 직접 만날 일은 없지만 큰 오점이 하나 존재 합니다
파이썬의 최대 재귀 깊이 즉, 자신을 불러오는 횟수가 1000번으로 정해져있기 때문에
1001!을 구하려고 하는 경우 최대 재귀 깊이를 넘어갔다는 에러가 발생합니다
이는 재할당을 사용한 팩토리얼도 마찬가지 입니다
여기는 계산은 가능하지만 값이 너무 크다고 나옵니다
사실상 1001!처럼 말도 안되게 큰 수를 계산할 일은 거의 없기 때문에 두 가지 방법중에 편하신 방법이나
보기 쉬운 방법으로 사용하시면 될 것 같습니다
오늘은 이렇게 팩토리얼을 구현하는 법을 알아봤습니다
다음 포스팅은 다양한 함수들의 테일러 급수를 구현해보겠습니다
긴 글 읽어주셔서 감사합니다!
'파이썬 > 수학과학 계산' 카테고리의 다른 글
Python으로 라이브러리 사용 없이 3가지 테일러 급수 구현해보기 (3) | 2023.11.13 |
---|