다음: 다루어 접근, 이전: 값으로 호출, 상위 문서: 함수 호출   [차례][찾아보기]


8.2.2 재귀

일부 제약이 있지만3, 함수의 재귀적 호출이 가능합니다. 재귀 함수는 직접적 또는 간접적으로 자기 자신을 호출하는 함수입니다. 예를 들자면, 여기에 비효율적4으로 정수의 계승을 계산하는 방법이 있습니다.

function retval = fact (n)
  if (n > 0)
    retval = n * fact (n-1);
  else
    retval = 1;
  endif
endfunction

위 함수는 자기자신을 직접 호출하기 때문에 재귀적입니다. 자기자신을 호출할 때마다 이전 호출 때보다 1씩 작아지는 매개변수를 사용하기 때문에 결국에는 끝나고 맙니다. 매개변수가 0보다 크지 않게 되면, 자기자신을 더 이상 호출하지 않아 재귀가 끝납니다.

내장 변수 max_recursion_depth가 재귀 횟수를 제한하여, 무한정한 재귀를 막습니다. 변수 max_stack_depth도 비슷하게 재귀와 비재귀 모두의 함수 호출 횟수를 제한합니다. 이 제한이 옥타브가 작동하는 전산기에서 동전통 위넘침을 방지하여, 탈출 신호를 주는 대신 해석기가 알아서 오류를 뱉고 명령 처리기로 돌아갑니다.

= max_recursion_depth ()
옛_값 = max_recursion_depth (새_값)
max_recursion_depth (새_값, "local")

함수의 재귀 호출 횟수를 제한하는 내부 변수를 조회하거나 설정합니다.

재귀 횟수가 한계를 초과하면, 오류 문구를 출력하고, 최상위가 다시 제어합니다.

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.

같이 보기: max_stack_depth.

= max_stack_depth ()
옛_값 = max_stack_depth (새_값)
max_stack_depth (새_값, "local")

함수의 재귀 호출 횟수를 제한하는 내부 변수를 조회하거나 설정합니다.

재귀 횟수가 한계를 초과하면, 오류 문구를 출력하고, 최상위가 다시 제어합니다.

함수 안에서 "local" 선택지를 넣어 부르면, 함수와 함수가 부른 종속 절차의 변수가 지역적으로 바뀝니다. 함수가 종료되면 원래 변숫값이 되돌아옵니다.

같이 보기: max_recursion_depth.


각주

(3)

일부 옥타브 함수는 재귀 호출을 못하는 형식으로 실행됩니다. 예를 들어, 상미분방정식 계산용 lsode는 재귀가 불가능한 포트란 아랫경로에서 온전하게 실행되어, lsode가 필요한 사용자 제공 함수에서 직접적 또는 간접적으로도 호출할 수 없습니다. lsode를 호출하면 오류가 발생합니다.

(4)

n이 양의 정수임을 한 번 확인하고 나서는 prod (1:n)gamma (n+1)를 대신 사용하는 것이 좋습니다.


다음: 다루어 접근, 이전: 값으로 호출, 상위 문서: 함수 호출   [차례][찾아보기]