์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ
์ฌ๊ท(Revursion) ํจ์๋ ํน์ ํจ์ ๋ด์์ ์์ ์ ๋ค์ ํธ์ถํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ๋ ํจ์์ด๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ ๋ฒ์์ ๋ฌธ์ ์์ ๋ ์์ ๋ฒ์์ ํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ ๋ฐฉ์์ด๋ค. ์ผ๋ฐ ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ตฌํ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์ฌ๊ท ํจ์๋ฅผ ํตํด ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ ๋ฐ๋๋ก ์ฌ๊ทํจ์๋ก ๊ตฌํ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
์ฌ๊ท ํจ์๋ ํจ์ ๋ด์์ ์๊ธฐ ์์ ์ ๊ณ์ ํธ์ถํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ํจ์ ์์ ๋ฐ๋์ ์ข ๋ฃ ๊ตฌ๊ฐ์ด ๋๋ BaseCase๋ฅผ ์๊ฐํ์ฌ ์ฝ๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ์๋๋ ์ํ์์ ์ด๋ค.
public class Recursion
{
public static void main(String[] args)
{
Function();
}
public static void Function()
{
System.out.println("๋ฐ๊ฐ์ต๋๋ค");
Function();
}
}
Funtion ํจ์์ ๊ธฐ๋ฅ์ "๋ฐ๊ฐ์ต๋๋ค"๋ฅผ ํธ์ถํ๊ณ ๋ค์ ์๊ธฐ ์์ ์ ํธ์ถํ๊ณ ์๋ค. ํด๋น ์์ค์์ ๋ฌธ์ ๋ ์๊ธฐ ์์ ์ ํธ์ถ๋งํ๊ณ ์์ง ํจ์ ์์ญ์ด ์ข ๋ฃ๋๋ ๊ตฌ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌดํ๋ฐ๋ณต๋๋ ๋ฃจํ์ ๋น ์ง๊ฒ ๋๋ค.
public class Recursion_Test
{
public static void main(String[] args)
{
Function(5);
}
public static void Function()
{
if(num==0)
{
return;
}
else
{
System.out.println("๋ฐ๊ฐ์ต๋๋ค.");
Function(num-1);
}
}
์ด๋ ๊ฒ ์์ ํ ๊ฒฐ๊ณผ, ๋งค๊ฐ๋ณ์ ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ return์ ํ๊ณ ์๋๊ฒฝ์ฐ "๋ฐ๊ฐ์ต๋๋ค"๋ฅผ ์ถ๋ ฅํ๊ณ num-1์ ํด๋นํ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ณ ์๋ค. ์ฌ๊ธฐ์ num ์ด 0์ผ ๊ฒฝ์ฐ return์ ํ๊ฒ ๋๋ ๊ตฌ๋ฌธ์ด ์ฌ๊ท ํจ์์ BaseCase๊ตฌ๊ฐ์ด ๋๋ค.
ํด๋น ์ฌ์ฌ ํจ์์ ํธ์ถ์ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์์ : 1๋ถํฐ n๊น์ง ํฉ ๊ตฌํ๊ธฐ ( recursive )
์์์ ๋ฐฐ์ด ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ 1๋ถํฐ n๊น์ง ํฉ์ ๊ตฌํ๋ ์ฌ๊ทํจ์๋ฅผ ๊ตฌํํด๋ณธ๋ค.
public class Recursion
{
public static void main(String[] args)
{
System.out.println("1๋ถํฐ 5๊น์ง์ ํฉ์ : " + Function(5));
}
public static int Function(int num)
{
if(num == 1)
{
return 1;
}
else
{
return num + Function(num -1);
}
}
}
์์ : ์ ๋ ฅ๋ฐ์ ์ ์ n์ 2์ง์๋ก ์ถ๋ ฅํ๊ธฐ ( recursive )
class Recursive {
public void recursive(int n) {
if(n==0)
return;
else{
recursive(n/2);
System.out.print(n%2);
}
}
public static void main(String[] args) {
Solution T=new Solution();
T.recursive(11);
}
}
//////////
์
๋ ฅ : 11
์ถ๋ ฅ : 1011
์์ : ํฉํ ๋ฆฌ์ผ ( recursive )
์ ๋ ฅ๋ฐ์ ์ ์ n์ ํฉํ ๋ฆฌ์ผ ๊ฐ์ ์ถ๋ ฅํ์์ค.
public class Recursive {
// ๋ฐํ๋ฐ์์ผํ๋ int
public int recursive(int n) {
if(n==1) return 1;
else return n*recursive(n-1);
}
public static void main(String[] args) {
Solution T=new Solution();
System.out.println(T.recursive(5));
}
}
//////////
์
๋ ฅ : 5
์ถ๋ ฅ : 5*4*3*2*1 = 120
์์ : ํผ๋ณด๋์น ( recursive )
1. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํผ๋ณด๋์น recursive
public class Solution {
public int recursive(int n) {
if(n==1) return 1;
else if(n==2) return 1;
else return recursive(n-1)+recursive(n-2);
}
public static void main(String[] args) {
Solution T=new Solution();
int n=10;
for(int i=1; i<=n; i++) System.out.print(T.recursive(i)+" ");
}
}
2. ์กฐ๊ธ ๋ ์ต์ ํ๋ ํผ๋ณด๋์น recursive
public class Solution {
static int[] fibo;
public int recursive(int n) {
if(n==1) return fibo[n]=1;
else if(n==2) return fibo[n]=1;
else return fibo[n]=recursive(n-1)+recursive(n-2);
}
public static void main(String[] args) {
Solution T=new Solution();
int n=10;
fibo=new int[n+1];
T.recursive(n);
for(int i=1; i<=n; i++) System.out.print(T.recursive(i)+" ");
}
}
๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ฉํ ํผ๋ณด๋์น recursive ( ๊ฐ์ฅ ์ต์ ํ )
๋ฉ๋ชจ์ด์ ์ด์ (memoization)์ด๋ ?
์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต์ํ์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์ . ๋์ ๊ณํ๋ฒ์ ํต์ฌ์ด ๋๋ ๊ธฐ์ ์ด๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ํ๋ ๋ง๋ค๊ณ ๊ฐ์ ์ฌ์ฌ์ฉํ์ฌ ํ์ดํ ๊ฒฐ๊ณผ, ์ฌ๊ท๋ง์ ์ฌ์ฉํ ์์ ํ์ด ๋ฐฉ๋ฒ๊ณผ ๋น๊ตํ์ฌ ์คํ์๋์ ์์ฒญ๋ ์ฐจ์ด๊ฐ ์๋ค.
public class Solution {
static int[] fibo;
public int recursive(int n) {
if(fibo[n]>0) return fibo[n];
if(n==1) return fibo[n]=1;
else if(n==2) return fibo[n]=1;
else return fibo[n]=recursive(n-2)+recursive(n-1);
}
public static void main(String[] args) {
Solution T=new Solution();
int n=45;
fibo=new int[n+1];
T.recursive(n);
for(int i=1; i<=n; i++) System.out.print(T.recursive(i)+" ");
}
}
'๐ ์ฝ๋ฉํ ์คํธ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BigDecimal ์ ๋ฆฌ (0) | 2022.11.05 |
---|---|
[JAVA][์๊ณ ๋ฆฌ์ฆ] DFS ( ์ด์ง ํธ๋ฆฌ ์ํ ) (0) | 2022.11.04 |
[JAVA] HashMap (0) | 2022.10.28 |
[JAVA] ์ด์งํ์ ( Binary Search ) (0) | 2022.10.26 |
[JAVA] List : LinkedList (0) | 2022.10.26 |