Post

Recursion_์žฌ๊ท€ ํ•จ์ˆ˜

๐Ÿ”ต ThingsILearned

โœ”๏ธ ์žฌ๊ท€ํ•จ์ˆ˜ ๋ฉˆ์ถ”๊ธฐ

ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋˜ ๋‹ค์‹œ ํ˜ธ์ถœ
์•ˆ ๋ฉˆ์ถ”๋Š” ์ฝ”๋“œ
๋ฌดํ•œ์œผ๋กœ DFS(3) โ–ถ๏ธ DFS(2) โ–ถ๏ธ DFS(1) โ–ถ๏ธ DFS(0) โ–ถ๏ธ DFS(-1) โ–ถ๏ธ DFS(-2) โ–ถ๏ธ DFS(-3)โ€ฆโ€ฆ
๋”ฐ๋ผ์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด if, else, return
์žฌ๊ท€๋ฅผ ๋ฉˆ์ถ”๋Š” ์กฐ๊ฑด์ด ๊ผญ ํ•„์š”ํ•˜๋‹ค

โŒ ๋ฌดํ•œ ์ฝ”๋“œ

1
2
3
    public void DFS(int n){
            DFS(n - 1); //์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๋ฉด ๋ฌดํ•œ์œผ๋กœ ๋ˆ๋‹ค
    }

โญ•๏ธ 3, 2, 1๊นŒ์ง€๋งŒ ์ถœ๋ ฅ๋˜๋Š” ํ•จ์ˆ˜

if, else, return์„ ์‚ฌ์šฉํ•œ๋‹ค.
return: ๊ฐ’์„ ๋ฐ˜ํ™˜ํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํ•จ์ˆ˜ ์ข…๋ฃŒ์˜ ์˜๋ฏธ๋„ ๊ฐ€์ง„๋‹ค.

1
2
3
4
5
6
    public void DFS(int n){
        if(n==0) return; //โญ๏ธ
        else {
            DFS(n - 1);
        }
    }

โœ”๏ธ ํ•จ์ˆ˜์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค.

3, 2, 1 ์ถœ๋ ฅ

1
2
3
4
5
6
7
    public void DFS(int n){
        if(n==0) return;
        else {
            System.out.print(n+ " ");
            DFS(n - 1); //โญ๏ธ
        }
    }

1, 2, 3 ์ถœ๋ ฅ

1
2
3
4
5
6
7
    public void DFS(int n){
        if(n==0) return;
        else {
            DFS(n - 1); //โญ๏ธ
            System.out.print(n+ " ");
        }
    }

โœ”๏ธ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” stack frame์„ ์‚ฌ์šฉํ•œ๋‹ค.

โ“ ์•ž์„  ํ•จ์ˆ˜์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค.์—์„œ ์™œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ถœ๋ ฅ๊ฐ’์ด ๋‹ฌ๋ผ์กŒ์„๊นŒ?
์žฌ๊ท€ํ•จ์ˆ˜๋Š” stack frame์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’ก stack์€ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์žˆ๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค.
๐Ÿ’ก stack frame์„ ์‚ฌ์šฉํ•จ์œผ๋กœ ์ธํ•ด์„œ back tracking์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ’ก stack frame์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์€
โ€ ๋งค๊ฐœ๋ณ€์ˆ˜
โ€โ€โ€โ€โ€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ์žˆ๋Š” ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜
โ€ ์ง€์—ญ๋ณ€์ˆ˜
โ€ ๋ณต๊ท€์ฃผ์†Œ
โ€โ€โ€โ€โ€โ€ ์˜ˆ๋ฅผ ๋“ค์–ด DFS(2)๋Š” ๋ณต๊ท€์ฃผ์†Œ๊ฐ€ DFS(3)์ผ ๊ฒƒ์ด๋‹ค.

Screenshot 2024-05-31 at 12 08 33

แ„แ…ฉแ„ƒแ…ตแ†ผแ„€แ…ฉแ†ผแ„Žแ…ขแ†จ-51

โœ”๏ธ 1, 2, 3์ด ์ถœ๋ ฅ๋˜๋Š” stack frame ์›๋ฆฌ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…

IMG_3301

IMG_3302

IMG_3303

IMG_3304

โœ… 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ถœ๋ ฅํ•˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main {
    public void DFS(int n){
        if(n==0) return;
        else {
            DFS(n - 1);
            System.out.print(n+ " ");
        }
    }


    public static void main(String[] args) {
        Main T = new Main();
        T.DFS(3);
    }
}

โœ… ์‹ญ์ง„์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main {
    public void DFS(int n){
        if(n==0) return;
        else {
            DFS(n/2);
            System.out.print(n%2);
        }
    }


    public static void main(String[] args) {
        Main T = new Main();
        T.DFS(13);
    }
}

โœ… ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ตฌํ•˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”

1
2
3
4
5
6
7
8
9
10
11
12
13
class Main {
    public int DFS(int n){
        if(n==1) return 1;
        else {
            return n* DFS(n-1);

        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        System.out.println(T.DFS(5));
    }
}
This post is licensed under CC BY 4.0 by the author.