Ruby에서 재귀 팩토리얼 함수를 작성하는 방법에 대한 도움이 필요합니다. lisp 인 다음 코드가 있지만 Ruby에서 동일한 작업을 수행하고 싶습니다.
(defun factorial (N)
(if (= N 1) 1
(* N (factorial (- N 1)))))
루비로 코드를 작성하는 방법은 다음과 같습니다.
def factorial(n)
return 1 if n == 1
n * factorial(n - 1)
end
factorial(5)
#=> 120
factorial(7)
#=> 5040
Stefan의 의견에 대한 편집 :
SystemStackError
값이 큰 오류 를 방지하려면 tail-recursive 방법을 n
사용하십시오 . 또한 Ruby의 최적화를 활성화해야합니다.tailcall
# before edit
factorial(100_000).to_s.size
#=> stack level too deep (SystemStackError)
피하려면 SystemStackError
RubyVM::InstructionSequence.compile_option = {
tailcall_optimization: true,
trace_instruction: false
}
RubyVM::InstructionSequence.new(<<-CODE).eval
def factorial(n, acc = 1)
return acc if n == 1
factorial(n - 1, n * acc)
end
CODE
puts factorial(100_000).to_s.size
#=> 456574
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다