소프트웨어/C++

[2003년 기말 11번] 합 출력 - 재귀호출

카켈 2007. 2. 24. 07:32



목적
  - 재귀 호출(Recursive call)을 익힌다.
문제
풀이

#include <iostream>

using namespace std;

long l_Recursive(long aIn)
{ return aIn + (aIn < 456 ? l_Recursive(aIn + 1) : 0); }

int main(void)
{ cout << "123부터 456 까지의 합 : " << l_Recursive(123) << endl; return 0; }

해설
  - 재귀 호출은 그 원리를 이해하면 정말 효율적인 코딩이 가능합니다.
  - 자기 자신을 계속 호출하되 리턴 값이 계속 누적 되기 때문에 무한 반복에서 빠져 나갈수 있는 조건만 갖추면 원하는 범위 내에서 계속 연산을 할수 있습니다.

  - 이 경우 455 전 까지만 계속 다음 숫자를 호출 합니다. 123 에서 시작하라고 하니 결국은

123 + l_Resursive(124)
123 + 124 + l_Resursive(125)
... (계속 반복)
123 + 124 + 125 + 126 + ... l_Resursive(454)
123 + 124 + 125 + 126 + ... 455 + l_Resursive(455)
123 + 124 + 125 + 126 + ... 456 + 0

이렇게 되어 원하는 값인 123 + 124 + ... + 455 + 456 = 96693 이렇게 됩니다.

  - 스택 방식으로 되어 있기 때문에 시스템 프로그래밍 공부 하시는 분들에게 유익한 함수 입니다. 나중에 어셈블러 공부 하실일 있으면 미리 익혀 두시면 참 도움이 될 겁니다.

참고

  - http://www.winapi.co.kr/clec/cpp2/16-2-1.htm : 재귀호출