본문 바로가기

Kosta 교육

[Day3 - Java] 반복문 연습문제 - 피보나치 수열 나열하기

기존의 피보나치 수열의 문제의 경우, 나열하는 것이 아닌 F(5)의 값을 구하라는 형식이므로 이는 재귀함수를 사용하는 경우가 대부분이다. 하지만 해당 문제의 경우 for()문 하나를 가지고 문제를 해결해야 하며, 주어진 for문을 채우는 것이기 때문에 for문 안을 제외하고는 수정이 불가능하다. 이를 해결하기 위한 문제는 아래와 같았다.

 

1) 피보나치 수열은 앞의 두개의 숫자를 계속 이용해야 하기 때문에 변수들의 값이 계속 변경되어야 한다는 점.

2) 반복문 안에서 어떠한 변수를 선언할 경우 이는 반복문이 반복될 때마다 계속 선언되기 때문에 동일한 값으로만 유지된다는 점

 

>> 이를 해결하기 위해서는 위에서 선언되었던 num1 ~ num3까지의 변수들을 이용해야 한다.

 

따라서, 1번과 결론을 같이 보았을 때에는 num1과 num2의 변수들의 값을 피보나치 계산을 위해 필요한 값들로 계속 업데이트를 해주는 방식을 이용한다.

        for(int i = 0; i<8; i++){
            num3 = num1+num2;

            // 기존의 num1과 num2를 가지고 진행
            // 앞의 두개의 값을 더해주는 것의 반복이기 때문에 num3를 구한 후 num1을 num2의 값으로 채우고,
            // num2를 num3의 값으로 채우면 계속 반복했을 때 앞의 두개의 값을 더하는 형상이 만들어짐.
            num1 = num2;
            num2 = num3;

            System.out.print(", "+ num3);
        }

위와 같이 num1은 num2로 값을 변경해주고, num2는 새로 만들어진 피보나치 값인 num3의 값으로 변경해주는 형식을 유지한다면 이는 피보나치 수열을 계속 나열하는 형식의 String을 출력할 수 있다.

 

전체 코드는 아래와 같다.

package practice.chap4;

public class p11 {
    public static void main(String[] args) {
        // 피보나치(Fibonnaci) 수열(數列)은 앞을 두 수를 더해서 다음 수를 만들어 나가 는 수열이다.
        // 예를 들어 앞의 두 수가 1과 1이라면 그 다음 수는 2가 되고 그 다음 수는 1과 2를 더해서 3이 되어서 1,1,2,3,5,8,13,21,... 과 같은 식으로 진행된다.
        // 1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오.

        int num1 = 1;
        int num2 = 1;
        int num3 = 0;
        System.out.print(num1 + ", " + num2);

        // 2번까지는 있기 때문에 8번만 더 반복하면 10번째 피보나치수열까지 나온다.
        for(int i = 0; i<8; i++){
            num3 = num1+num2;

            // 기존의 num1과 num2를 가지고 진행
            // 앞의 두개의 값을 더해주는 것의 반복이기 때문에 num3를 구한 후 num1을 num2의 값으로 채우고,
            // num2를 num3의 값으로 채우면 계속 반복했을 때 앞의 두개의 값을 더하는 형상이 만들어짐.
            num1 = num2;
            num2 = num3;

            System.out.print(", "+ num3);
        }
    }
}

'Kosta 교육' 카테고리의 다른 글

[Day12 - JAVA] chap9. lang 패키지_1  (0) 2023.08.29
[Day8 - JAVA] chap6. 객체지향언어1_2  (0) 2023.08.28
[Day12] chap8. 예외처리  (0) 2023.08.28
[Day7 - JAVA] chap6. 객체지향언어1_1  (0) 2023.08.28
[Day1 - JAVA] 자바 소개  (0) 2023.08.09