Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

데이터 구조의 꼬리 재귀

<시간/>

여기서 우리는 꼬리 재귀가 무엇인지 볼 것입니다. 꼬리 재귀는 기본적으로 재귀 함수를 함수의 마지막 문으로 사용합니다. 따라서 재귀 호출에서 돌아온 후 할 일이 없을 때를 꼬리 재귀라고 합니다. 꼬리 재귀의 한 예를 볼 것입니다.

예시

#include <iostream>
using namespace std;
void printN(int n){
   if(n < 0){
      return;
   }
   cout << n << " ";
   printN(n - 1);
}
int main() {
   printN(10);
}

출력

10 9 8 7 6 5 4 3 2 1 0

꼬리 재귀는 꼬리 재귀가 아닌 것보다 낫습니다. 재귀 호출 후에 남은 작업이 없으므로 컴파일러가 코드를 최적화하기가 더 쉽습니다. 하나의 함수가 호출되면 해당 주소는 스택 내부에 저장됩니다. 따라서 꼬리 재귀라면 스택에 주소를 저장할 필요가 없습니다.

재귀를 사용하여 계승을 사용할 수 있지만 함수는 꼬리 재귀가 아닙니다. 팩트(n-1)의 값은 팩트(n) 내부에 사용됩니다.

long fact(int n){
   if(n <= 1)
      return 1;
   n * fact(n-1);
}

다른 매개변수를 추가하여 꼬리 재귀로 만들 수 있습니다. 이것은 아래와 같습니다 -

long fact(long n, long a){
   if(n == 0)
      return a;
   return fact(n-1, a*n);
}