반응형
백준 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
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Swift 알고리즘] 백준 2231 분해합 (0) | 2022.04.28 |
---|---|
[Swift 알고리즘] 백준 2798 블랙잭 (0) | 2022.04.28 |
[Swift 알고리즘] 백준 2447 별 찍기 - 10 (0) | 2022.04.27 |
[Swift 알고리즘] 백준 10872 팩토리얼 (0) | 2022.04.27 |
[Swift 알고리즘] 백준 1000번 A+B (0) | 2021.04.05 |