์žฌ๊ท€(Recursion)

Icarus<Wing>ยท2025๋…„ 4์›” 24์ผ
post-thumbnail

๐Ÿ”–์žฌ๊ท€: ์ž์‹ ์„ ์ •์˜ํ•  ๋•Œ, ์ž๊ธฐ ์ž์‹ ์„ ์žฌํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ํŒฉํ† ๋ฆฌ์–ผ๊ณผ ํ”ผ๋ณด๋‚˜์น˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ง€๊ฒน๊ฒŒ ๋ดค์œผ๋‹ˆ ์ž์„ธํ•œ ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์ž‘ ๊ณผ์ •์€ ์ƒ๋žตํ•œ๋‹ค.

์žฌ๊ท€์˜ ์ˆ˜ํ•™์  ์ ‘๊ทผ

๋Œ€๋ถ€๋ถ„์˜ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ ํ™”์‹(recurrence relation)์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ์ฆ‰, ํŒฉํ† ๋ฆฌ์–ผ์€ f(n)=nโˆ—f(nโˆ’1)f(n) = n * f(n-1)๋กœ ํ‘œํ˜„๋˜๊ณ , ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€
f(n)=f(nโˆ’1)+f(nโˆ’2)f(n) = f(n-1) + f(n-2) (๋‹จ, n์€ 2 ์ด์ƒ์˜ ์ž์—ฐ์ˆ˜)๋กœ ํ‘œํ˜„๋œ๋‹ค.(๐Ÿ‘‰์ถ”ํ›„์— dp์—์„œ ๋งŽ์ด ํ™œ์šฉ๋˜๋‹ˆ ์ฐธ๊ณ ํ•ด๋‘์ž.)

๐Ÿ’ก์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋•Œ base condition์„ ๊ฑธ์–ด๋‘์ง€ ์•Š์œผ๋ฉด stackoverflow๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ if๋ฌธ์œผ๋กœ ๊ฑธ์–ด๋‘์ž.

๐Ÿ’ป๋Œ€ํ‘œ์ ์ธ ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜

private static int fib(int n) {
        // base condition(f(0) = 1, f(1) = 1)
        if (n == 0 || n == 1)
            return 1;
        return fib(n - 1) + fib(n - 2);
    }

๐Ÿ’ก์ฐธ๊ณ ๋กœ ๋ฉ”์„œ๋“œ์— static์„ ์„ ์–ธํ•œ ์ด์œ ๋Š”, ํด๋ž˜์Šค ๋”ฐ๋กœ ๋งŒ๋“ค๊ธฐ ๊ท€์ฐฎ์•„์„œ ๋ฉ”์ธ ํ•จ์ˆ˜์—์„œ ๋ฐ”๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.
(์ž๋ฐ”๋Š” ํด๋ž˜์Šค ๋กœ๋” ๊ธฐ๋ฐ˜์œผ๋กœ JVM์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— static์„ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด non-static method๋Š” ์ธ์Šคํ„ด์Šค ์—†์ด๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค)

โฐ์žฌ๊ท€์˜ ์‹œ๊ฐ„๋ณต์žก๋„

์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ๋จผ์ € ์ดํ•ดํ•ด์•ผ ๋Ÿฐํƒ€์ž„ ์ดˆ๊ณผ ์—๋Ÿฌ์— ๋น ์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค!

์žฌ๊ท€์˜ ์‹œ๊ฐ„๋ณต์žก๋„ = ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆ˜ x (์žฌ๊ท€ ํ•จ์ˆ˜ ํ•˜๋‚˜๋‹น) ์‹œ๊ฐ„๋ณต์žก๋„

์•ž์„œ ์‚ดํŽด๋ณธ ํŒฉํ† ๋ฆฌ์–ผ์€ ์ด n๋ฒˆ ํ˜ธ์ถœํ•˜๋Š”๋ฐ base condition์„ ๋งŒ๋‚˜๋ฉด return๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฐ˜๋ฉด์—, ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜๋Š” f(n - 1)๊ณผ f(n - 2)๋ฅผ ๊ณ„์†ํ•ด์„œ 2๋ฐฐ์”ฉ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2^n์ด ๊ฑธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ return๋ฌธ๋งŒ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
O(2Nโˆ—1)=O(2N)O(2^N * 1) = O(2^N)์ด ๊ฑธ๋ฆฐ๋‹ค.

profile
๋ชจ๋“  ์ฝ”๋“œ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ๊ธฐ์— ์›์ธ์„ ํŒŒ์•…ํ•  ๋•Œ๊นŒ์ง€ ์ง‘์š”ํ•˜๊ฒŒ ํƒ๊ตฌํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€