Ruby에서 재귀 팩토리얼 함수를 작성하는 방법은 무엇입니까?

와우 .P

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

자원 1 자원 2

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 팩토리얼 프로그램에서 재귀를 설명하는 방법은 무엇입니까?

분류에서Dev

MoonScript에서 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

재귀 함수에 대한 메서드 정의를 작성하는 방법은 무엇입니까?

분류에서Dev

함수 내에서 재귀 쿼리를 사용하는 방법은 무엇입니까?

분류에서Dev

멤버 함수에서 재귀를 처리하는 방법은 무엇입니까?

분류에서Dev

회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

분류에서Dev

Ruby에서 맵으로 각 함수를 리팩토링하는 방법은 무엇입니까?

분류에서Dev

TypeScript에서 구성 가능한 팩토리 함수를 입력하는 방법은 무엇입니까?

분류에서Dev

파일 및 디렉토리 복사에서 재귀를 방지하는 방법은 무엇입니까?

분류에서Dev

재귀 감소 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

파이썬 "재귀"함수에서 전역 변수를 재설정하는 방법은 무엇입니까?

분류에서Dev

클라우드 함수에서 : 재귀적인 JavaScript 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

이진 트리를 생성하는 재귀 메서드를 만드는 방법은 무엇입니까?

분류에서Dev

C ++에서 팩토리얼을 찾는이 재귀 프로그램의 논리는 무엇입니까?

분류에서Dev

파이썬에서 재귀 적으로 빈 디렉토리를 찾는 방법은 무엇입니까?

분류에서Dev

동적 중첩 for 루프를 생성하기 위해 R에서 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

한 번에 여러 디렉토리를 재귀 적으로 grep하는 방법은 무엇입니까?

분류에서Dev

재귀 하강 파서의 일부에 대한 코드를 작성하는 방법은 무엇입니까?

분류에서Dev

F #에서 일반 재귀 확장 메서드를 작성하는 방법은 무엇입니까?

분류에서Dev

재귀에서 일회성 작업을 수행하는 방법은 무엇입니까?

분류에서Dev

재귀 함수에서 숫자의 자릿수를 변경하는 방법은 무엇입니까? C ++

분류에서Dev

for 루프 재귀 함수에서 이전 n 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

try do 함수를 위해 JavaScript에서 재귀를 사용하는 방법은 무엇입니까?

분류에서Dev

이름 서버 재귀를 활성화하는 방법은 무엇입니까?

분류에서Dev

Async / Await-재귀 Ajax 함수에서 Javascript Async-Await를 구현하는 방법은 무엇입니까?

분류에서Dev

for 루프 내에서 재귀 함수를 올바르게 호출하는 방법은 무엇입니까?

분류에서Dev

elisp에서 함수를 재귀 적으로 전달하는 방법은 무엇입니까?

분류에서Dev

glob 패턴을 제외하고 디렉토리 내에서 재귀 적으로 파일 수 (디렉토리 아님)를 찾는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    이 팩토리얼 프로그램에서 재귀를 설명하는 방법은 무엇입니까?

  2. 2

    MoonScript에서 재귀 함수를 작성하는 방법은 무엇입니까?

  3. 3

    재귀 함수에 대한 메서드 정의를 작성하는 방법은 무엇입니까?

  4. 4

    함수 내에서 재귀 쿼리를 사용하는 방법은 무엇입니까?

  5. 5

    멤버 함수에서 재귀를 처리하는 방법은 무엇입니까?

  6. 6

    회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

  7. 7

    JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

  8. 8

    Ruby에서 맵으로 각 함수를 리팩토링하는 방법은 무엇입니까?

  9. 9

    TypeScript에서 구성 가능한 팩토리 함수를 입력하는 방법은 무엇입니까?

  10. 10

    파일 및 디렉토리 복사에서 재귀를 방지하는 방법은 무엇입니까?

  11. 11

    재귀 감소 함수를 작성하는 방법은 무엇입니까?

  12. 12

    파이썬 "재귀"함수에서 전역 변수를 재설정하는 방법은 무엇입니까?

  13. 13

    클라우드 함수에서 : 재귀적인 JavaScript 함수를 호출하는 방법은 무엇입니까?

  14. 14

    이진 트리를 생성하는 재귀 메서드를 만드는 방법은 무엇입니까?

  15. 15

    C ++에서 팩토리얼을 찾는이 재귀 프로그램의 논리는 무엇입니까?

  16. 16

    파이썬에서 재귀 적으로 빈 디렉토리를 찾는 방법은 무엇입니까?

  17. 17

    동적 중첩 for 루프를 생성하기 위해 R에서 재귀 함수를 작성하는 방법은 무엇입니까?

  18. 18

    한 번에 여러 디렉토리를 재귀 적으로 grep하는 방법은 무엇입니까?

  19. 19

    재귀 하강 파서의 일부에 대한 코드를 작성하는 방법은 무엇입니까?

  20. 20

    F #에서 일반 재귀 확장 메서드를 작성하는 방법은 무엇입니까?

  21. 21

    재귀에서 일회성 작업을 수행하는 방법은 무엇입니까?

  22. 22

    재귀 함수에서 숫자의 자릿수를 변경하는 방법은 무엇입니까? C ++

  23. 23

    for 루프 재귀 함수에서 이전 n 변수를 전달하는 방법은 무엇입니까?

  24. 24

    try do 함수를 위해 JavaScript에서 재귀를 사용하는 방법은 무엇입니까?

  25. 25

    이름 서버 재귀를 활성화하는 방법은 무엇입니까?

  26. 26

    Async / Await-재귀 Ajax 함수에서 Javascript Async-Await를 구현하는 방법은 무엇입니까?

  27. 27

    for 루프 내에서 재귀 함수를 올바르게 호출하는 방법은 무엇입니까?

  28. 28

    elisp에서 함수를 재귀 적으로 전달하는 방법은 무엇입니까?

  29. 29

    glob 패턴을 제외하고 디렉토리 내에서 재귀 적으로 파일 수 (디렉토리 아님)를 찾는 방법은 무엇입니까?

뜨겁다태그

보관