설명
1) 피보나치 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.
2) 입력은 피보나치 수열의 총 항의 수이다. 만약 7이 입력되면 1 1 2 3 5 8 13을 출력하면 된다.
입력
첫 줄에 총 항수 N(3<=N<=45)이 입력된다.
출력
첫 줄에 피보나치 수열을 출력합니다.
예시 입력 1
10
예시 출력 1
1 1 2 3 5 8 13 21 34 55
문제 해결
피보나치 수열은 1번째와 2번째항이 1이며, 그 이후의 각 항은 바로 앞 두 항의 합으로 구성된 수열이다.
1, 1, 2, 3, 5, 8, 13 ... 이런식으로 구성 된다.
n이 1과 2일 경우 1을 리턴하고
그 이후부터 FIBO(n-2) + FIBO(n-1) 를 반환하는 재귀함수로 풀어보았다.
하지만 피보나치 수열은 n이 커질수록 동일한 계산을 여러 번 반복하여 수행하기에 매우 비효율적이므로 배열하고 for문을 사용하는 게 훨씬 좋은 방법이다.
최종 코드
import java.util.Scanner;
public class P04_피보나치재귀_메모이제이션 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
for (int i = 1; i <= N; i++) {
System.out.print(FIBO(i) + " ");
}
}
public static int FIBO(int n) {
if(n==1) return 1;
else if (n==2) return 1;
else return FIBO(n-2)+FIBO(n-1);
}
}
반응형
'알고리즘 문제풀이 입문: 코딩테스트 대비 > 섹션 7. Recursive, Tree, Graph(DFS,BFS 기초)' 카테고리의 다른 글
Tree 말단 노드까지 가장 짧은 경로 (DFS, BFS) (0) | 2024.05.08 |
---|---|
이진트리 레벨탐색 (BFS : Breadth-First Search) (0) | 2024.05.07 |
부분집합 구하기 (DFS) (0) | 2024.04.30 |
이진트리 순회 (DFS : Depth-First Search) (0) | 2024.04.29 |
팩토리얼 (0) | 2024.04.29 |