Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- fstring
- permutation
- 코딩
- unreal
- 개발
- 얌얌코딩
- UE5
- 링크드리스트
- 언리얼로그
- TPS
- 내가해냄
- 미라클모닝
- 재귀함수
- 백준
- 오늘의에러
- 연산자오버로딩
- 개발자
- 탐색기법
- C++
- 게임개발
- 구조체포인터
- dfs
- 구조체
- 게임프로그래밍
- c++자료구조
- 코딩테스트
- 프로그래밍
- 커스텀로그
- 언리얼
- 자료구조
Archives
- Today
- Total
All is well
[YYBASIC0204/얌얌코딩] 재귀 함수에 대한 착각과 진실 본문
재귀 함수
- 재귀 함수는 함수가 호출될 때마다 기존 호출과는 별개의 새로운 함수 instance를 생성하는데, 이는 메모리 상에서 서로 다른 공간을 차지합니다.
- 동일한 이름의 변수를 사용하는 두 개의 함수 instance가 존재할 수 있으며, 이는 각 호출이 독립적으로 실행되기 때문에 가능합니다.
- ∴ 재귀 함수는 단순히 나 자신을 호출하는 것이 아니라, 코드를 복사하여 호출하는 것으로 이해하는 것이 좋습니다.
재귀 함수 작동 방식
- 재귀 함수는 메모리에서 함수를 쌓는 구조로 작동합니다.
- 이는 메모리 소모를 발생시키는데, 호출이 무한히 진행되면 메모리가 꽉 차게 되어 stack overflow가 발생하게 됩니다.
- ∴ 재귀 함수에서는 최적의 성능을 위해 무한 호출을 방지하는 조건문을 설정해야 합니다.
//YYBASIC02_04
#include <iostream>
using namespace std;
/* [F11]을 이용하여 하나하나 다 보면서 공부하는 것을 추천 */
// 문제1 : 출력 결과가 0 1 2 3이 되게 Recursion 구현하기
#pragma region Recursion 1
void test1(int x)
{
// 무한정 호출되는 함수를 방지하는 게 급선무
if (x == 4)
{
return;
}
cout << x << ' ';
test1(x + 1);
}
#pragma endregion
// 문제2 : 배열의 값을 출력하기
#pragma region Recursion 2
int arr[5] = {5, 7, 1, 2, 3};
void test2(int x)
{
if ( x == size(arr) )
return;
cout << arr[x] << ' ';
test2(x + 1);
}
#pragma endregion
void main()
{
cout << "< Recursion >"<<endl;
cout << "test1 : ";
test1(0);
cout << "\ntest2 : ";
test2(0);
}
'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0206/얌얌코딩] 재귀함수의 깊이와 너비 (1) | 2025.02.06 |
|---|---|
| [YYBASIC0205/얌얌코딩] cstring 라이브러리 (0) | 2025.02.06 |
| [YYBASIC0203/얌얌코딩] Direct 기법, 2중 포인터, 2차원 배열 (5) | 2025.02.05 |
| [YYBASIC0202/얌얌코딩] DAT(Direct Addressing Table) - Hash Table (0) | 2025.02.04 |
| [YYBASIC0201/얌얌코딩] 기본기 복습 (0) | 2025.02.04 |