D+29
- ์ฌ๊ทํจ์ -
(์ฌ๊ท)
์ฌ๊ท (Recursion)
•์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋, ๊ตฌ์กฐ๋ ๋์ผํ์ง๋ง ๋ ์์ ๊ฒฝ์ฐ๋ฅผ ๋จผ์ ํด๊ฒฐํจ์ผ๋ก์จ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
•ํจ์ ์ค์ค๋ก๋ฅผ ํธ์ถํ๋ ๊ฒ
์ฌ๊ท ์ดํดํ๊ธฐ
Q. ์์ฐ์๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ํฉ์ ๋ฆฌํดํ๋ ํจ์ 'arrSum'์ ์์ฑํด๋ผ.
๋ง์ฝ ํด๋น๋ฌธ์ ๋ฅผ ์ง๋ฉดํ๊ฒ ๋ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์ด๋ ต์ง ์๊ฒ 'for๋ฌธ'์ ์ฌ์ฉํด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ ๊ฒ์ด๋ค.
function arrSum(arr) {
let sum = 0;
for(let i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
return sum;
}
์๋ก๋ค๋ฉด, arr์ [10, 3, 6, 2]๊ฐ ์ ๋ ฅ๋์์ ๊ฒฝ์ฐ '10 + 3 + 6 + 2'๋ก '21'์ด ๋ฆฌํด๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ์ฐ๋ฆฌ๋ ๋ฐ๋ณต๋ฌธ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง
'for๋ฌธ' ๋ง๊ณ ๋ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ ๊ทธ๊ฒ์ ๋ฐ๋ก '์ฌ๊ทํจ์'๋ฅผ ์ด์ฉํด ํธ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋จ ๋ฌธ์ ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๊ธฐ ์ ์ ์ฌ๊ท์ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ์ ์๊ฐํ ํ์๊ฐ ์๋ค.
1. ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ์ ๊ณ์ฐ์ ์๋ํ๋ค.
// ๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ๋ ๊ฒ์ด ์๋ ์ชผ๊ฐ์ ๋๋์ด์ ์๊ฐํด ๋ณธ๋ค.
arr([10, 3, 6, 2]) = 10 + arrSum([3, 6, 2]);
2. ๋ฌธ์ ๊ฐ ์์์ง์ง ์์ ๋ ๊น์ง ๋ ์์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋ค.
// ๋ด๊ฐ ์
๋ ฅํ ๋ฐฐ์ด์ด ๋์ด ๋ณด์ผ๋ ๊น์ง ๊ณผ์ ์ ๊ฑฐ์น๋ค.
arrSum([3, 6, 2]) = 3 + arrSum([6, 2]);
arrSum([6, 2]) = 6 + arrSum([2]);
arrSum([2]) = 2 + arrSum([]);
3. ๋ฌธ์ ๊ฐ ๊ฐ๋จ๋ช ๋ฃํด์ ธ์ ํ ์ ์๊ฒ ๋์์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๊ฒฐํด ์ค๋ค.
์ด๋์ ์ฃผ์ํ ์ ์ ์ฌ๊ท๋ ์ข ๋ฃ์ง์ ์ ๋ง๋ค์ด ์ฃผ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋์ง ์๋ ์ด์ ๊ณ์ ์คํ๋๊ธฐ๋๋ฌธ์
์ข ๋ฃ์ง์ ์ ์ ํด์ฃผ๋ ๊ฒ์ ์์ง ๋ง์์ผ ํ๋ค.
arrSum([]) = 0; // ๋ฌธ์ ๊ฐ ๋์ด์ ์์์ง์ง ์๋ ์๊ฐ
// ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ์ ํด๊ฒฐ์ฑ
์ ์ ์ฉํ๋ค.
arrSum([2]) = 2 + arrSum([]) = 2;
arrSum([6, 2]) = 6 + arrSum([2]) = 6 + 2 = 8;
arrSum([3, 6, 2]) = 3 + arrSum([6, 2]) = 3 + 8 = 11;
arrSum([10, 3, 6, 2]) = 10 + arrSum([3, 6, 2]) = 10 + 11 = 2
์ด๋ฐ ์์ผ๋ก ํด๋น ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉด ์ฌ๊ทํจ์๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋๋ค.
function arrSum(arr) {
if(arr.length === 0) { // ์ฌ๊ทํจ์๊ฐ ๋๋ ์ง์ ์ ์ ์
return 0;
}
let head = arr[0];
let tail = arr.slice(1);
return head + arrSum(tail);
}
์ฌ๊ท์ ์ฅ๋จ์
•์ฅ์
์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๊ท๋ก ํํํ๊ธฐ์ ์์ฐ์ค๋ฌ์ธ ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋จ์ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
•๋จ์
๊ฐ์ด ๋ฆฌํด๋๊ธฐ ์ ๊น์ง ํธ์ถ๋ง๋ค call stack์ ์๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์
๋ฉ๋ชจ๋ฏธ๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ค.
์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
•์ฃผ์ด์ง ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ด๊ณ ๋ ์์ ๋ฌธ์ ๋ก ๋๋์ด ์ง ์ ์๋ ๊ฒฝ์ฐ
•์ค์ฒฉ๋ ๋ฃจํ๊ฐ ๋ง๊ฑฐ๋ ์ค์ฒฉ์ ์ ๋๋ฅผ ๋ฏธ๋ฆฌ ์๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
for (let k = 0; k < n; k++) {
for (let l = 0; l < n; l++) {
for (let m = 0; m < n; m++) {
for (let n = 0; n < n; n++) {
for (let o = 0; o < n; o++) {
for (let p = 0; p < n; p++) {
// do something
someFunc(i, j, k, l, m, n, o, p);
}
}
}
}
}
}
}
}
๋ชจ๋ ์ฌ๊ทํจ์๋ while์ด๋ for๋ฌธ์ ํตํด ํํ์ด ๊ฐ๋ฅํ์ง๋ง ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ์์ ๊ฒฝ์ฐ์ฒ๋ผ
๋ฌดํํ ์์ ์ผ์ผํ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ด ์ข์ ๋ฟ๋ง ์๋๋ผ
๊ฐ๋จํ๋ค.
'์๋ > Code-States' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+31] ์๋ก์ํฌ 1์ผ์ฐจ (0) | 2020.10.07 |
---|---|
[D+30] ํ๋ฆฌ์ฝ์ค ๋ง์ง๋ง Pair Programming (0) | 2020.10.06 |
[D+28] ๋ท์งธ ์ฃผ ํ๊ธฐ (0) | 2020.10.05 |
[D+24 - 27] ์ถ์์ฐํด...ใ (0) | 2020.09.30 |
[D+23] ๋น๋๊ธฐ ํธ์ถ๊ณผ ํ์ด๋จธ API (0) | 2020.09.29 |
๋๊ธ