적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Baekjoon

[Swift 알고리즘] 백준 10870 피보나치 수 5

hongssup_ 2022. 4. 27. 09:29
반응형

백준 10870번 <피보나치 수 5>

재귀함수 기초 예제 피보나치 수 

let input = Int(readLine()!)!
print(Fibonacci(input))

//재귀함수
func Fibonacci(_ n: Int) -> Int {
    if n == 0 { return 0 }
    else if n == 1 { return 1 }
    else {
        return Fibonacci(n - 1) + Fibonacci(n - 2)
    }
}

//재귀함수 축약
func Fibonacci(_ n: Int) -> Int {
    return n < 2 ? n : Fibonacci(n-1) + Fibonacci(n-2)
}

재귀함수를 사용하면 코드가 직관적이고 가독성이 좋다. 

ternery operator를 사용하여 한 줄로 축약할 수도 있다. 

 

반복문으로 풀어서 작성하면 다음과 같다. 

반복문 1 처럼 피보나치 수 정의에 충실하게? s3 = s1 + s2 로 변수를 만들어 주고 n-2까지만 반복문을 돌려주는 방법도 있지만,

반복문 2 처럼 tmp 변수를 만들어 n-1만큼 반복문을 돌리고 s1을 반환하도록 하는 방법이 더 간결하긴 한 것 같다. 

//반복문 1
func Fibonacci(_ n: Int) -> Int {
    var s1 = 0, s2 = 1, s3 = s1 + s2
    if n == 0 { return 0 }
    else if n == 1 { return 1 }
    else {
        for _ in 0..<n-1 {
            s3 = s1 + s2
            s1 = s2
            s2 = s3
        }
    return s3
    }
}

//반복문 2
func Fibonacci(_ n: Int) -> Int {
    var s1 = 0, s2 = 1
    for _ in 0..<n {
        let tmp = s1
        s1 = s2
        s2 = tmp + s2
    }
    return s1
}
728x90
반응형