여러 재귀 호출을 사용하여 일반 재귀를 꼬리 재귀로 변환

JDesuv

다양한 재귀 함수를 꼬리 재귀로 변환하는 방법을 이해하려고합니다. 나는 피보나치와 팩토리얼을 꼬리 재귀로 변환하는 많은 예를 살펴보고 이해했지만 다소 다른 구조의 문제로 도약하는 데 어려움을 겪고 있습니다. 예 :

def countSteps(n: Int): Int = {
  if(n<0) return 0
  if(n==0) return 1
  countSteps(n-1) + countSteps(n-2) + countSteps(n-3)
}

이것을 꼬리 재귀 구현으로 어떻게 변환 하시겠습니까?

다음과 같은 유사한 질문을 살펴 보았습니다. 일반 재귀를 꼬리 재귀로 변환 그러나 이것들은이 문제로 해석되지 않는 것 같습니다.

Svante

일부 꼬리 재귀 적이 지 않으며이를 변환하려는 시도는 결국 스택을 수동으로 구축하게됩니다.

그러나이 경우 누적 할 수 있습니다 (예상되지 않음, 스칼라 없음).

def countSteps(n: Int): Int = {
  if (n < 0) return 0
  countStepsAux(n, 0, 1, 0, 0)
}

def countStepsAux(n: Int, step: Int, n1: Int, n2: Int, n3: Int): Int = {
  if (n == step) return n1
  countStepsAux(n, step + 1, n1 + n2 + n3, n1, n2)
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

꼬리 재귀 / 반복 절차를 완전 재귀 절차로 전환

분류에서Dev

정상 재귀를 꼬리 재귀로 변환

분류에서Dev

재귀를 사용하여 배열 인덱스의 재귀 및 반환

분류에서Dev

zmv를 사용하여 여러 파일의 이름을 재귀 적으로 변경해야합니다.

분류에서Dev

ActionListener를 사용하여 재귀 트리 메서드 호출

분류에서Dev

키 일치를 사용하여 XSLT 템플릿 재귀 호출

분류에서Dev

TBB를 사용하여 "꼬리 호출"재귀를 다중 스레드하는 방법

분류에서Dev

for 루프 및 재귀를 사용하여 콜백을 promise로 변환

분류에서Dev

Fetch API를 사용하여 페이지가 매겨진 출력을 재귀 적으로 반환

분류에서Dev

재귀를 사용하여 정수를 이진수로 변환

분류에서Dev

재귀를 사용하여 문자열을 반환하는 방법?

분류에서Dev

재귀를 사용하여 vue 리소스 ajax 호출 재시도

분류에서Dev

재귀를 사용하여 트리에서 적절하게 값을 반환합니다.

분류에서Dev

Scheme에서 재귀를 사용하여 값 반환

분류에서Dev

재귀를 사용하여 공통 요소를 찾고 벡터로 반환

분류에서Dev

파일 상태를 사용하여 디렉토리를 재귀

분류에서Dev

CTE를 사용하여 여러 열을 필터링하는 SQL 재귀 쿼리

분류에서Dev

TypeTag를 사용하여 재귀 적으로 함수 호출

분류에서Dev

자바 : 재귀 호출에서 원래 매개 변수를 사용하여 내 메서드를 재귀 적으로 호출하는 방법

분류에서Dev

재귀를 사용하여 부울 배열을 통해 반복

분류에서Dev

동일한 키를 사용하여 재귀 배열을 단일 배열로 변경

분류에서Dev

setTimeout을 사용하여 재귀 적으로 함수 호출

분류에서Dev

Powershell을 사용하여 재귀 적으로 파일 삭제

분류에서Dev

logparser를 사용하여 CSV 입력 파일을 통해 재귀

분류에서Dev

metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

분류에서Dev

재귀 코드를 사용하여 2 개의 값 (총 파일, 폴더)을 반환하고 싶습니다.

분류에서Dev

재귀를 사용하여 Java 입력을 대문자로 변경

분류에서Dev

Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

분류에서Dev

내 재귀 메서드가 true를 반환하면 왜 재귀 호출을 입력합니까?

Related 관련 기사

  1. 1

    꼬리 재귀 / 반복 절차를 완전 재귀 절차로 전환

  2. 2

    정상 재귀를 꼬리 재귀로 변환

  3. 3

    재귀를 사용하여 배열 인덱스의 재귀 및 반환

  4. 4

    zmv를 사용하여 여러 파일의 이름을 재귀 적으로 변경해야합니다.

  5. 5

    ActionListener를 사용하여 재귀 트리 메서드 호출

  6. 6

    키 일치를 사용하여 XSLT 템플릿 재귀 호출

  7. 7

    TBB를 사용하여 "꼬리 호출"재귀를 다중 스레드하는 방법

  8. 8

    for 루프 및 재귀를 사용하여 콜백을 promise로 변환

  9. 9

    Fetch API를 사용하여 페이지가 매겨진 출력을 재귀 적으로 반환

  10. 10

    재귀를 사용하여 정수를 이진수로 변환

  11. 11

    재귀를 사용하여 문자열을 반환하는 방법?

  12. 12

    재귀를 사용하여 vue 리소스 ajax 호출 재시도

  13. 13

    재귀를 사용하여 트리에서 적절하게 값을 반환합니다.

  14. 14

    Scheme에서 재귀를 사용하여 값 반환

  15. 15

    재귀를 사용하여 공통 요소를 찾고 벡터로 반환

  16. 16

    파일 상태를 사용하여 디렉토리를 재귀

  17. 17

    CTE를 사용하여 여러 열을 필터링하는 SQL 재귀 쿼리

  18. 18

    TypeTag를 사용하여 재귀 적으로 함수 호출

  19. 19

    자바 : 재귀 호출에서 원래 매개 변수를 사용하여 내 메서드를 재귀 적으로 호출하는 방법

  20. 20

    재귀를 사용하여 부울 배열을 통해 반복

  21. 21

    동일한 키를 사용하여 재귀 배열을 단일 배열로 변경

  22. 22

    setTimeout을 사용하여 재귀 적으로 함수 호출

  23. 23

    Powershell을 사용하여 재귀 적으로 파일 삭제

  24. 24

    logparser를 사용하여 CSV 입력 파일을 통해 재귀

  25. 25

    metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

  26. 26

    재귀 코드를 사용하여 2 개의 값 (총 파일, 폴더)을 반환하고 싶습니다.

  27. 27

    재귀를 사용하여 Java 입력을 대문자로 변경

  28. 28

    Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

  29. 29

    내 재귀 메서드가 true를 반환하면 왜 재귀 호출을 입력합니까?

뜨겁다태그

보관