์ํ: ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด๋ ํจ์๊ฐ ์๊ธฐ์์ ์ ํธ์ถํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ๋ฒ (๋ฐ๋ณต์ผ๋ก ํํ ๊ฐ๋ฅ! but ๋ฌธ์ ์ ๋ฐ๋ผ ์ํ์ด ํจ์จ์ ์ผ ์๋, ๋ฐ๋ณต์ด ํจ์ธ์ ์ผ ์๋)
๋ถํ ์ ๋ณต๋ฐฉ๋ฒ : ์์ ๋ฌธ์ ๋ก ๋ถํดํ์ฌ ํด๊ฒฐ (์ผ๋ถ ํด๊ฒฐ ํ ๋๋จธ์ง ๋ฌธ์ ์ ๋ํด ์ํ ํธ์ถ)
์ข
๋ฃ๋ถ and ์ํ๋ถ
-> ํธ์ถ ์ ์คํ์ ํ์ฑ ๋ ์ฝ๋๊ฐ ๊ธฐ๋ก์ด ๋๋๋ฐ, ์ข
๋ฃ๊ฐ ๋์ง ์๋๋ค๋ฉด ์คํ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ์ค๋ฅ ์์ฑ
ํฉํ ๋ฆฌ์ผ ๋ฌธ์ -์ํ
int factorial(int n) {
if (n <= 1) return 1; //์ข
๋ฃ๋ถ
else return (n*factorial(n - 1));
}
-> ๊ผฌ๋ฆฌ์ํ: 'n*factorial(n - 1)'์ ๊ฐ์ด ์ํ ํธ์ถ์ด ๋์์ ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ - ๋ฐ๋ณต์ผ๋ก ํํ ๊ฐ๋ฅ (๋จธ๋ฆฌ์ํ, ๊ผฌ๋ฆฌ์ํ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๊ผฌ๋ฆฌ์ํ์ผ๋ก!!!)
-> ๊ฐ๋
์ฑ, ๊ฐ๋จ, ์ฌ์ (but, ์คํ์๊ฐ ์ค๋๊ฑธ๋ฆผ-ํจ์ ํธ์ถ, ์ฌ๋ถ์ ๊ธฐ์ต ์ฅ์ ํ์- ์ํ ๊ธฐ์ตํด์ผํ๋ฏ๋ก)
double power(double x, int n) {
if (n == 0) return 1;
else if ((n % 2) == 0) return power(x*x, n / 2);
else return x*power(x*x, (n - 1) / 2);
}
-> ์๊ฐ ๋ณต์ก๋: O(log2n)
: ์ํ์ ๋ํ์ ์ธ ์์