반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 둘만의 암호
- LocalDate
- over()
- 혼공얄코
- 자바의정석
- 백트래킹
- 멀티프로세싱
- CPU
- 오블완
- 리눅스
- hackerrank
- 다형성
- 프로그래머스 둘만의 암호
- java
- SQL Mapper
- 캡슐화
- StringBuilder
- 티스토리챌린지
- spring security 설정
- 오버로딩
- 프로그래머스
- 입출력
- 자바의 정석
- localtime
- 오버라이딩
- spring security
- 둘만의 암호 자바
- 멀티태스킹
- StringBuffer
- 쿠키
Archives
- Today
- Total
쉽게 쉽게
[Java] 피보나치 수열 구현 본문
반응형
▤ 목차
1. 피보나치 수열이란

피보나치 수열(Fibonacci numbers) 이란?
- ‘이전 두 항의 합이 다음 항이 되는 수열’을 의미
- 즉, 첫째 항과 둘째 항이 1이고 이후 모든 항은 모든 항은 바로 앞 두항의 합으로 이루어지는 수열
- 피보나치 수열의 예로는 [1, 1, 2, 3, 5, 8, 13, 21, 34,...]과 같은 형태로 구성
2. 반복문으로 구현
public static int Fibonacci(int n) {
int answer = 0;
if (n <= 1) return n; //값이 1인 경우 해당 값을 반환
int pprev = 1; // 첫번째값
int prev = 2; // 두번째값
//세번째 값부터 n까지 반복
for (int i = 3; i <= n; i++) {
answer = prev + pprev; // 세번째값 = 첫번째값 + 두번째값
pprev = prev;
prev = answer;
}
return answer;
}
3. 재귀함수로 구현
public static int recursiveFibonacci(int n) {
if (n <= 1) {
return n;
} else {
return recursiveFibonacci(n - 1) + recursiveFibonacci(n - 2);
}
}
단 재귀 알고리즘으로 구현하는 경우, 구하려고 하는 숫자가 커질수록 메모리 속도가 현저하게 떨어진다는 단점이 있다.
불필요한 중복 값을 방지하기 위해 계산한 값을 저장해 두는 메모라이제이션 기법을 사용하여 구현해야 한다.
메모라이제이션 기법 사용(추천)
static long[] memo;
public static long recursiveFibonacci(int n) {
if (n <= 1)
return n;
else if (memo[n] != 0)
return memo[n];
else
return memo[n] = fibonacci(n - 1) + fibonacci(n - 2);
}
4. 동적계획법(DP)으로 구현(추천)
public static int dynamicFibonacci(int n) {
if (n <= 1) { //값이 1인 경우 해당 값을 반환
return n;
}
// 첫번째와 두번째 배열에 값을 지정
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
// 3번째부터 n까지 반복
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
시간 복잡도는 O(n)으로 효율적인 구현 방법이다.
| 잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |

반응형
'Java > Java' 카테고리의 다른 글
| [Java] 자주 사용하는 타입(String, Int, Char) 변환 방법 (0) | 2025.12.02 |
|---|---|
| [Java] 배열, 컬렉션 정렬 방법 (0) | 2025.11.24 |
| [Java] 정규표현식(regex) 정리 (1) | 2024.12.08 |
| [Java] break, contiune문 사용법 (0) | 2024.11.24 |
| [Java] Map 메서드 활용법 (2) | 2024.11.19 |
