JosephCha의 개발일지

백준 알고리즘 (팩토리얼) No. 10872 본문

알고리즘 및 자료구조

백준 알고리즘 (팩토리얼) No. 10872

JosephCha 2021. 7. 28. 13:51

https://www.acmicpc.net/problem/10872

 

재귀 단계

피보나치 수 역시 단순 for문으로도 구할 수 있지만, 학습을 위해 재귀를 써 봅시다.

www.acmicpc.net

코드

import Foundation

let a = readLine()

func recursive(_ n:Int) -> Int{
    if n == 0 {
        return 0
    } else if n == 1{
        return 1
    } else {
        return n * recursive(n-1)
    }
}
let b = Int(a!)
print(recursive(b!))

설명

컴공 1학년때, 나를 괴롭히던 재귀 함수다.

팩토리얼은 해당 숫자에서 1까지의 곱을 의미한다.

무슨소린지 헷갈리니, 예시를 들자면

ex) 5!(5의 팩토리얼) -> 5X4X3X2X1 이다.


recursive 함수를 살펴보면,

입력된 n의 값이 2 이상일 경우, 재귀 함수 프로세스를 진행 시킨다.

재귀 함수는 n의 값을 -1씩 시켜면서 n이 1이 될때까지 진행시킨다.

else if n == 1{
        return 1
    } else {
        return n * recursive(n-1)
    }

if n == 0 는 0!에 대한 예외 처리일 뿐, 재귀함수 프로세스에 아무런 영향을 끼치지 않는다.

if n == 0 {
	return 0
}

재귀함수 TIP

재귀 함수는 말이나, 글로 설명하기 힘들다.
제일 정확하게 이해하는 방법은 디버깅을 해보며 재귀함수를 따라가는 것이다.

 

'알고리즘 및 자료구조' 카테고리의 다른 글

병합정렬  (0) 2022.04.20
동적 계획법(DP)  (0) 2022.02.24
선택정렬  (0) 2021.12.08
삽입정렬  (0) 2021.12.08
버블정렬  (0) 2021.12.06
Comments