All is well

[YYBASIC0207/얌얌코딩] 재귀함수 예제 생각해보기 본문

C++/YYBASIC

[YYBASIC0207/얌얌코딩] 재귀함수 예제 생각해보기

D0YUN 2025. 2. 7. 08:12

 

  • `dfs1(int level) `은 함수가 호출되면 num을 증가시키고, 호출이 끝나면 num을 감소시킵니다. 따라서 최종 num은 0이 됩니다.
  • `dfs2(int level)` 은 함수가 호출될 때, 호출이 끝났을 때 모두 num을 증가시킵니다. 이는 함수가 얼마나 순회하였는지 count하는 것과 같습니다. 따라서 최종 num은 28이 됩니다.
// YYBASIC02_07
#include <iostream>
using namespace std;

int num = 0;
void dfs1(int level)
{
    if (level == 3)
        return;

    //dfs(level + 1);         
    //dfs(level + 1);         

    // 위 두 줄의 코드가 같다. 
    // 따라서 for문을 이용하여 한 줄로 표현해 보고자 한다.
    for (size_t i = 0; i < 2; i++)
    {
        num++;
        dfs1(level + 1);
        num--;
    }

    cout << "level : " << level << endl;
}

void dfs2(int level)
{
    if (level == 3)
        return;

    for (size_t i = 0; i < 2; i++)
    {
        num++;
        dfs2(level + 1);
        num++;
    }

    cout << "level : " << level << endl;
}

void main()
{
    // 재귀 호출 깊이
    // 재귀 호출 너비
    dfs1(0);
    cout << "value of num after dfs1() : " << num << "\n\n";    // num == 0

    dfs2(0);
    cout << "value of num after dfs2() : " << num << "\n";      // num == 28
}

 

LV06 재귀함수 예제 생각해보기