π μ€ννλ μ & μ¬κ·ν¨μ
μ€ν νλ μ
μ€ν νλ μμ λ©λͺ¨λ¦¬μ μ€νμμμ ν¨μμ νΈμΆκ³Ό κ΄κ³λλ μ§μλ³μμ λ§€κ° λ³μκ° μ μ₯λλ μμμ΄λ€. μ€ν μμμ ν¨μμ νΈμΆκ³Ό ν¨κ» ν λΉλλ©°, ν¨μμ νΈμΆμ΄ μλ£λλ©΄ μλ©Ένλ€.
ν¨μκ° νΈμΆλλ©΄ μ€νμλ ν¨μμ 맀κ°λ³μ, νΈμΆμ΄ λλ λ€ λμκ°λ λ°ν μ£Όμ κ°, ν¨μμμ μ μΈλ μ§μλ³μ λ±μ΄ μ μ₯λλ€. μ΄λ κ² μ€ν μμμ μ°¨λ‘λλ‘ μ μ₯λλ ν¨μμ νΈμΆ μ 보λ₯Ό μ€ν νλ μ μ΄λΌκ³ νλ€.
μ€ν νλ μμ νμ©νλ©΄ ν¨μμ νΈμΆμ΄ λͺ¨λ λλ λ€μ ν΄λΉ ν¨μκ° νΈμΆλκΈ° μ΄μ μνλ‘ λλμκ° μ μλ€.
μ¬κ·ν¨μ
public class Recursive {
public static void main(String[] args){
Recursive T = new Recursive();
T.DFS(3);
}
public void DFS(int n){
if(n == 0) {
return;
} else {
System.out.print(n + " ");
DFS(n-1)
}
}
}
μμ μ½λλ₯Ό μ€νν κ²°κ³Όλ DFS ν¨μλ‘ μΈμ κ° 3μ΄ λ€μ΄μ€κ³ , λ°λ³΅λ¬Έμ λλκ²μ²λΌ μΈμκ°μ΄ 0 μ΄ λ λκΉμ§ κ°μ DFSλ₯Ό κ³μ νΈμΆνκ² λλ€.
3 2 1
κ·Έλ¬λ©΄ System.out.print()λ₯Ό μ΄μ©ν΄μ μΆλ ₯νλ©΄ μμ κ°μ΄ 3 2 1 μμΌλ‘ μΆλ ₯λλ€. λ§μ½ 1λΆν° μ€λ¦μ°¨μμΌλ‘ λμ€κ² νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉ ?
public class Recursive {
public static void main(String[] args){
Recursive T = new Recursive();
T.DFS(3);
}
public void DFS(int n){
if(n == 0) {
return;
} else {
DFS(n-1)
System.out.print(n + " ");
}
}
}
print λ©μλλ₯Ό DFS ν¨μ μλλ‘ μμΉνκΈ°λ§ νλ©΄ λλ€. μ΄ μλ¦¬κ° λ°λ‘ μ€ννλ μμ΄λ€.
Stack
μ€νμ LIFO λ°©μμΌλ‘ κ°μ₯ λμ€μ μ μ₯λ λ°μ΄ν°κ° λ¨Όμ λμ€κ² λλ€.
- μ²μ μΈμκ°μΌλ‘ 3μ΄ λ€μ΄μ€κ³ DFS ν¨μ μ€ν
- 0μ΄ μλκΈ° λλ¬Έμ elseλ¬Έμ ν΅ν΄ λ€μ νλ² DFS(n-1)ν¨μλ₯Ό νκ² λλ€. μ΄λ κ°μ₯ μ€μν κ²μ DFS(3)ν¨μλ line 11μμ λ©μΆ°μ Έ μλ μνλ‘ μ€νμ μμ΄κ² λλ€. μ½κ² λ§νμλ©΄ κ·Έ λ€μ System.out.print()λ©μλκ° μ€νλμ§ μλ μνλ‘ μ€νμ μμΈλ€.
- κ·Έ λ€μ μΈμ κ°μΌλ‘ 2κ° λ€μ΄μ€κ²λλ€. μ΄λ²μλ 0μ΄ μλκΈ° λλ¬Έμ 2λ² λ¬Ένκ³Ό λμΌνκ² μ€νλκ³ , μ΄λ κ² μΈμ κ°μ΄ 0 μ΄ λ λκΉμ§ μμ΄κ² λλ€.
- λ§μ§λ§μΌλ‘ DFS()ν¨μμ 0 μ΄ λ€μ΄μ¨λ€. νμ§λ§ 0 μΌλλ returnμ νκΈ° λλ¬Έμ ν΄λΉ ν¨μλ₯Ό λ°λ‘ μ’ λ£λλ€. μ΄νμ μ€νμ λ©μΆ°μ Έ μλ ν¨μλ€μ΄ μ°¨λ‘λ‘ μ€ννκ² λλ€. μ¦, λ§μ§λ§μΌλ‘ μμλ μΈμ κ° 1λΆν° μ€νλλ€λ λ»μ΄λ€.
> μΆκ°μμ
ν©ν 리μΌ
μ¬κ·ν¨μλ₯Ό μ΄μ©ν΄μ ν©ν 리μΌμ ꡬμ±νλ€λ©΄ ?
public class Factorial {
public static void main(String[] args){
Factorial T = new Factorial();
System.out.print(T.DFS(5));
}
public int DFS(int n){
if (n == 1) {
return 1;
} else {
return n*DFS(n-1);
}
}
}
// κ²°κ³Ό 120
μ¬κ·λ₯Ό 1μμ λ©μΆλ κ² μ΄μΈμλ λμΌν λ°©μμΌλ‘ μλνλ€. 1μμ λ©μΆλ μ΄μ λ ν©ν 리μΌμ λͺ¨λ μμ μ μμ κ³±μ΄κΈ° λλ¬Έμ΄λ€.
μ²μ μΈμκ°μΌλ‘ 5κ° λ€μ΄μ€λ©΄ 5 * DFS(5-1) -> μ€νμ μμ κ·Έλ¦¬κ³ 4 * DFS(4-1)μ€νμ μμ. μ΄λ°μμΌλ‘ λ°λ³΅λμ΄μ μΈμ κ°μ΄ 1μ΄ λ λκΉμ§ μ§νλκ³ λ€ μμλ€λ©΄ 맨 μ μ€νλΆν° κΊΌλ΄μ κ²°κ΅μ 1 * 2 * 3 * 4 * 5 = 120μ κ²°κ³Όλ₯Ό μ»λ κ²μ΄λ€.
'π μ½λ©ν μ€νΈ > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA] String.Format() μλ¦Ώμ μ±μ°κΈ° (0) | 2024.03.09 |
---|---|
[JAVA] DFS & BFS μ 리 (2) | 2024.01.11 |
[JAVA] Comparable & Comparator (0) | 2024.01.09 |
[JAVA][μλ£κ΅¬μ‘°] νΈλ¦¬μ ( TreeSet ) (0) | 2023.12.12 |
[JAVA] HashSet (0) | 2023.04.05 |