PersesTitan(페르) 기술블로그

[Ruby] 루비 팩토리얼 함수 만들기 본문

Language/Ruby

[Ruby] 루비 팩토리얼 함수 만들기

PersesTitan(페르) 2023. 12. 1. 10:48

ruby는 팩토리얼 함수가 존재하지 않기 때문에 간단하게 팩토리얼 함수를 만들어 보는 법을 알아 보겠습니다.

 

팩토리얼

팩토리얼은 1부터 n까지의 값까지 값을 모두 곱한 값을 의미합니다.

5! (5팩토리얼) 일때 1 * 2 * 3 * 4 * 5의 값이 5!의 값이 되는 원리를 이용하여 팩토리얼 함수를 구현하는 방법이죠

 

inject

ruby에는 inject라는 배열의 계산을 편하게 해주는 함수가 존재합니다.

해당 함수를 이용하여 팩토리얼을 구하는 함수를 간단하게 구할 수 있게 됩니다.

다음은 기본적인 inject를 사용하여 구현한 factorial함수 입니다.

 

sum현재까지의 계산한 값이고, v는 현재 리스트 값 아이템 값 입니다.

def factorial(n)
  1.upto(n).inject { |sum, v| sum * v }
end

puts factorial(3)
puts factorial(4)
puts factorial(5)

결과

6
24
120

 

간결화

위 코드는 다음과 같이 간결화가 가능해집니다.

def factorial(n)
  1.upto(n).inject(:*)
end

 

그리고 함수를 람다식으로 만들면 더욱 간결화가 가능해집니다.

factorial = ->(n) { 1.upto(n).inject(:*) }

puts factorial.call(3)
puts factorial.call(4)
puts factorial.call(5)

 

upto를 이용하는 방법도 있지만 다음과 같은 방법도 가능합니다.

factorial = ->(n) { (1..n).inject(:*) }

 

위 방법 중 원하는 방법으로 팩토리얼 값 구하면 좋을 것 같습니다.