πŸ’» Computer Science/- Data Structure, Algorithm

[μ•Œκ³ λ¦¬μ¦˜-PS] Java μ—μ„œ μž¬κ·€ 호좜둜 νŒ©ν† λ¦¬μ–Όμ„ κ΅¬ν˜„ν•˜λŠ” 방법

Wonit 2020. 2. 21. 15:00

μž¬κ·€

 

μž¬κ·€μ˜ 뜻

μž¬κ·€λž€ 본래의 κ²ƒμœΌλ‘œ λ‹€μ‹œ λŒμ•„κ°€λŠ” 것을 말 ν•œλ‹€κ³  ꡬ글 κ²€μƒ‰μ—μ„œ λ°œμ·Œν•΄ μ™”λ‹€.


이 말은 μ–΄λ–€ 사건이 자기 μžμ‹ μ„ ν¬ν•¨ν•˜κ³  λ‹€μ‹œ 자기 μžμ‹ μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜λ  λ•Œ 이λ₯Ό μž¬κ·€μ (Recursive) 이라고 ν•œλ‹€.

 

본래의 κ²ƒμœΌλ‘œ λ‹€μ‹œ λŒμ•„κ°„λ‹€λŠ” 것을 쒀더 μ§κ΄€μ μœΌλ‘œ λ³΄μ—¬μ£Όμžλ©΄

 

ν™”λ©΄μ•ˆμ— 또 ν™”λ©΄μ•ˆμ„ ν˜ΈμΆœν•˜λŠ” 방솑사고

μ΄λŸ¬ν•œ 것듀이 λ°”λ‘œ μž¬κ·€μ΄λ‹€.

μž¬κ·€ 호좜

ν”„λ‘œκ·Έλž˜λ°μ—μ„œλ„ 이런 μž¬κ·€μ  효과λ₯Ό μ΄μš©ν•˜λ©΄ μ’€ 더 κ°„κ²°ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ ꡬ사할 수 μžˆλŠ”λ° μž¬κ·€ ν˜ΈμΆœμ„ κ°€μž₯ 잘 ν‘œν˜„ν•  수 μžˆλŠ” 것이 νŒ©ν† λ¦¬μ–Ό 이닀.

 

νŒ©ν† λ¦¬μ–Ό

 

νŒ©ν† λ¦¬μ–Όμ€ 1λΆ€ν„° N κΉŒμ§€μ˜ λͺ¨λ“  수λ₯Ό κ³±ν•˜λŠ” 것인데, λ‹€μŒκ³Ό 같이 λŠλ‚Œν‘œλ‘œ νŒ©ν† λ¦¬μ–Όμ„ μ •μ˜ν•œλ‹€.

 

 

이 과정을 μ½”λ“œλ‘œ λ§Œλ“€μ–΄ 보자면 λ‹€μŒκ³Ό κ°™λ‹€

 

μž¬κ·€ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ§€ μ•Šμ€ νŒ©ν† λ¦¬μ–Ό ν•¨μˆ˜

 

class Main {

    int factorialNonR(int num){
        int ans = 1;
        for (int i = 1; i <= num; i++) {
            ans = ans * i;
        }

        return ans;
    }
}

 

μœ„μ™€ 같이 μž¬κ·€ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ for문을 μ΄μš©ν•˜μ—¬ i λΆ€ν„° 1 κΉŒμ§€μ˜ λͺ¨λ“  곱을 ans λΌλŠ” λ³€μˆ˜μ— μ €μž₯ν•˜κ³  return ν•˜κ²Œ λœλ‹€.

 

ν•˜μ§€λ§Œ μž¬κ·€λ₯Ό μ‚¬μš©ν•˜λ‹¨λ‹€λ©΄ λ”μš± κ°„κ²°ν•˜κ³  직관적인 μ½”λ“œκ°€ 될 것이닀.

 

μž¬κ·€ ν˜ΈμΆœμ„ μ‚¬μš©ν•œ νŒ©ν† λ¦¬μ–Ό ν•¨μˆ˜

class Main{

    int factorial(int num){
        if(num > 0) return num * factorial(num-1);
        else return 1;
    }

 }

 

ifμ ˆμ—μ„œ 보면 return 을 ν•˜λŠ”λ° ν˜„μž¬μ˜ numκ³Ό factorial(num-1)의 호좜 κ²°κ³Όλ₯Ό κ³±ν•˜λŠ”λ°, 또 factorial(num-1) 은 factorial(num-1) * factorial(num-2)둜 λ‚˜λˆ μ§ˆ 수 μžˆλ‹€.

 

점점 μˆ˜ν–‰ν•˜λ‹€κ°€ n이 0이 λ˜λŠ” μˆœκ°„ 1을 λ¦¬ν„΄ν•΄μ„œ λ‹€μ‹œ 상ν–₯μ‹μœΌλ‘œ μ˜¬λΌκ°„λ‹€.