본문 바로가기

알고리즘

[Algorithm] 재귀함수

참고한 블로그 : https://blog.naver.com/tipsware/221423058988



* 재귀함수의 장점 ? 반복문 사용을 줄임으로써 효율적인 코드를 작성할 수 있다.

* 재귀함수란 ? 함수가 자신을 다시 호출하는 구조로 만들어진 함수이고, 이렇게 호출되는 것을 재귀 호출이라고 함.


예를 들어, 1부터 10까지 더하는 프로그램을 보자.


#include<stdio.h>

int main(){

int i, sum = 0;

printf("Sum = ");

for(int i=1; i<=10; i++) sum = sum + i;

printf("%d",sum);

}


이 코드의 결과는 55로 나오지만 반복문을 사용한 것을 볼 수 있다.


#include<stdio.h>

int RangeSum(int a)

{

if(a==1) return a; // a 값이 1이 되면 재귀 호출을 중단!!

return RangeSum(a-1)+a;

}


int main()

{

int sum;

printf("Sum : ");

sum = RangeSum(10);

printf("%d\n",sum);

return 0;

}


결과는 동일하게 55가 출력된다.




재귀 호출의 흐름을 이해하기 위해 정리해보았다.

return에 작성한 코드를 보면,


RangeSum(10) = RangeSum(9) + 10; 임을 알 수 있다.


여기서 RangeSum(9)는 또 RangeSum(8) + 9 로 구성되고,


결국에는 ..


RangeSum(1) + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 임을 알 수 있고,.


a 가 1일때는 1을 리턴하므로 


1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 과 같이 표현할 수 있다.


즉 결과는 55로 출력이 된다.


재귀 호출을 잘 활용하면 복잡한 알고리즘을 아주 단순하게 표현이 가능하다.



'알고리즘' 카테고리의 다른 글

[Algorithm] 런타임 에러가 발생하는 이유  (0) 2019.01.28
[Algorithm] PROSJEK  (0) 2019.01.28
[Algorithm] beehive  (0) 2019.01.28
[Algorithm] 좌석 문제  (0) 2019.01.27
[Algorithm] 빙고 게임  (0) 2019.01.21