์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†๋Š” ์žฌ๊ท€ ์ฝ”๋“œ์˜ ์˜ˆ

์žฌ๊ท€ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ ์ฒ˜์Œ ๋‘ ์ˆซ์ž๊ฐ€ 0๊ณผ 1์ด๊ณ  ๋‹ค์Œ ๊ฐ ์ˆซ์ž๋Š” ์ด์ „ ๋‘ ์ˆซ์ž์˜ ํ•ฉ๊ณผ ๊ฐ™์€ ์ˆซ์ž ์‹œํ€€์Šค๋ผ๋Š” ๊ฒƒ์„ ๋ˆ„๊ตฌ๋‚˜ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ํ‘œ์‹œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


public class Fibonacci {
    public static void main(String[] args) {
        System.out.println(0);
        System.out.println(1);
        printFibonacci(0, 1);
    }

    private static void printFibonacci(long penultimate, long previous) {
        long current = penultimate + previous;
        System.out.println(current);
        printFibonacci(previous, current);
    }
}
    

์žฌ๊ท€์ ์ธ printFibonacci ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜์Œ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์‹œํ€€์Šค์˜ ์ฒ˜์Œ ๋‘ ์ˆซ์ž์ธ 0๊ณผ 1์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ž…๋ ฅ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ํ•ฉ๊ณ„๋งŒ ํ‘œ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋Š” ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์–ป๊ณ , ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ฝ˜์†”์— ์ธ์‡„ํ•˜๊ณ , ์žฌ๊ท€์ ์œผ๋กœ printFibonacci ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒˆํ˜ธ(previous)์™€ ํ˜„์žฌ ๋ฒˆํ˜ธ(current)๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ฝ”๋“œ์—๋Š” ๋‘ ๊ฐ€์ง€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋Š” long ํ˜•์‹์„ ์˜ค๋ฒ„ํ”Œ๋กœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œํ€€์Šค์˜ 104๋ฒˆ์งธ ์ˆซ์ž๋Š” ์Œ์ˆ˜์ด๋ฉฐ long ํ˜•์‹์ด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋Œ€๋žต 12,000๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•œ ํ›„ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ "main" java.lang.StackOverflowError์˜ ์˜ˆ์™ธ

์ง€๊ธˆ์€ Java์—์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์Šคํƒ์ด ๋ฌด์—‡์ธ์ง€ ๊ธฐ์–ตํ•  ์ ์ ˆํ•œ ์‹œ๊ธฐ์ž…๋‹ˆ๋‹ค. Java ๋จธ์‹ ์€ ๋ชจ๋“  ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์Šคํƒ์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Java ์‹œ์Šคํ…œ์ด ์ƒˆ StackTraceElement๋ฅผ ์Šคํƒ์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ด ์š”์†Œ๋Š” ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํƒ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ํ•ญ์ƒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. StackTraceElement์— ๋Œ€ํ•œ ์„ค๋ช…์„œ์—๋Š” "์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ๋ฐ˜๋ณต๋˜์–ด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ JVM์—๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์Šคํƒ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํฌ๊ธฐ๋Š” OS ๋ฐ JVM ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์Šคํƒ ์ž์ฒด ์™ธ์—๋„ ๊ธฐ๋ณธ ๋ณ€์ˆ˜(๋ฉ”์„œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ํŠน์ • ๊ฐ’) ๋ฐ ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ("ํž™"์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์žˆ์Œ)๋Š” ์ด ํŠน์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ ์Šคํƒ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” LIFO ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ข…๋ฃŒ ์กฐ๊ฑด์ด ์žˆ๋Š” ์ˆ˜์ •๋œ ์˜ˆ

์ฝ”๋“œ์˜ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ •๋ฉด์œผ๋กœ ํ•ด๊ฒฐํ•ด ๋ด…์‹œ๋‹ค. ์Šคํƒ์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๋” ํฌ๊ฒŒ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด "-Xss" ํ”Œ๋ž˜๊ทธ๋กœ JVM์„ ์‹œ์ž‘ํ•˜๊ณ  ์Šคํƒ์— ํ• ๋‹นํ•  ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 5MB๋ฅผ ํ• ๋‹นํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. IDEA์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ ๊ธธ์ด๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์•ฝ 12,000๊ฐœ์˜ ์ˆซ์ž๋กœ ์ œํ•œ๋˜์ง€ ์•Š๊ณ  ์‹œํ€€์Šค์˜ 49,000๊ฐœ ์ด์ƒ์˜ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋Š ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ StackOverflowError ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค .

์Šคํƒ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž, ๋…ผ๋ฆฌ์—์„œ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋ด…์‹œ๋‹ค. ์žฌ๊ท€๊ฐ€ ๋ฉˆ์ถ”๋Š” ์ง€์ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ˜ธ์ถœ ์Šคํƒ์ด ํ’€๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ์ด์ƒ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์กฐ๊ฑด์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ Integer.MAX_VALUE ๋ฏธ๋งŒ์ธ ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค .

์ด ์กฐ๊ฑด์„ ๊ณ ๋ คํ•  ์ƒˆ printFibonacciWithCondition ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ •๋œ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ์—์„œ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


public class Fibonacci {
    public static void main(String[] args) {
        System.out.println(0);
        System.out.println(1);
//        printFibonacci(0, 1);
        printFibonacciWithCondition(0, 1);
    }

    private static void printFibonacci(long penultimate, long previous) {
        long current = penultimate + previous;
        System.out.println(current);
        printFibonacci(previous, current);
    }

    private static void printFibonacciWithCondition(long penultimate, long previous) {
        long current = penultimate + previous;
        if (current > Integer.MAX_VALUE) {
            return;
        }
        System.out.println(current);
        printFibonacciWithCondition(previous, current);
    }
}
    

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ์ถœ๋ ฅ์ด ์ˆซ์ž 1836311903์œผ๋กœ ๋๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆซ์ž ์•ž์˜ ์ˆซ์ž๋Š” 1134903170์ž…๋‹ˆ๋‹ค. ์ด ์ˆซ์ž์˜ ํ•ฉ์€ 2_971_215_073์ด๋ฉฐ ์‹ค์ œ๋กœ Integer.MAX_VALUE(2_147_483_647)๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค .

์ด ๋ณ€๊ฒฝ์œผ๋กœ ๊ธด ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฒ„๊ทธ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋” ๋งŽ์ด ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ BigInteger ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

์žฌ๊ท€ ํ•˜๊ฐ• ๋ฐ ํ’€๊ธฐ

์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„์„ํ•ด ๋ด…์‹œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด echo ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  printFibonacciWithCondition ๋ฉ”์„œ๋“œ ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ ์ „ํ›„์— ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค .


public class Fibonacci {
    public static void main(String[] args) {
        System.out.println(0);
        System.out.println(1);
        printFibonacciWithCondition(0, 1);
    }

    private static void printFibonacciWithCondition(long penultimate, long previous) {
        long current = penultimate + previous;
        if (current > Integer.MAX_VALUE) {
            return;
        }
        echo(true, penultimate, previous);
        System.out.println(current);
        printFibonacciWithCondition(previous, current);
        echo(false, penultimate, previous);
    }

    private static void echo(boolean isBeforeRecursiveCall, long penultimate, long previous) {
        if (isBeforeRecursiveCall) {
            System.out.printf("Before method call with args: %d, %d. Current number = ", penultimate, previous);
        } else {
            System.out.printf("After method call with args: %d, %d\n", penultimate, previous);
        }
    }
}
    

์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

0
1
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 0, 1. ํ˜„์žฌ ๋ฒˆํ˜ธ = 1
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 1, 1. ํ˜„์žฌ ๋ฒˆํ˜ธ = 2
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 1, 2. ํ˜„์žฌ ๋ฒˆํ˜ธ = 3 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 2, 3. ํ˜„์žฌ ๋ฒˆํ˜ธ = 5 ์ธ์ˆ˜
๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 3, 5. ํ˜„์žฌ ๋ฒˆํ˜ธ = 8
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 5, 8. ํ˜„์žฌ ๋ฒˆํ˜ธ = 13
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 8, 13. ํ˜„์žฌ ๋ฒˆํ˜ธ = 21
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 13, 21. ํ˜„์žฌ ๋ฒˆํ˜ธ = 34
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 21, 34. ํ˜„์žฌ ๋ฒˆํ˜ธ = 55
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 34, 55. ํ˜„์žฌ ๋ฒˆํ˜ธ = 89
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 55, 89. ํ˜„์žฌ ์ˆ˜ = 144
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 89, 144. ํ˜„์žฌ ๋ฒˆํ˜ธ = 233 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 144, 233. ํ˜„์žฌ ๋ฒˆํ˜ธ = 377
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 233, 377. ํ˜„์žฌ ๋ฒˆํ˜ธ = 610
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 377, 610. ํ˜„์žฌ ๋ฒˆํ˜ธ = 987
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 610, 987. ํ˜„์žฌ ๋ฒˆํ˜ธ = 1597 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 987, 1597. ํ˜„์žฌ ๋ฒˆํ˜ธ = 2584
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 1597, 2584. ํ˜„์žฌ ๋ฒˆํ˜ธ = 4181
๋ฉ”์„œ๋“œ ์ „ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ: 2584, 4181. ํ˜„์žฌ ๋ฒˆํ˜ธ = 6765
์ธ์ˆ˜๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 4181, 6765. ํ˜„์žฌ ๋ฒˆํ˜ธ = 10946
์ธ์ˆ˜๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 6765, 10946. ํ˜„์žฌ ๋ฒˆํ˜ธ = 17711 ์ธ์ˆ˜
๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 10946, 17711. ํ˜„์žฌ ๋ฒˆํ˜ธ = 28657
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 17711, 28657. ํ˜„์žฌ ๋ฒˆํ˜ธ = 46368 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 28657, 46368. ํ˜„์žฌ ๋ฒˆํ˜ธ = 75025 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 46368, 75025. ํ˜„์žฌ ๋ฒˆํ˜ธ = 121393 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 75025, 121393. ํ˜„์žฌ ๋ฒˆํ˜ธ = 196418
Args์™€์˜ ๋ฐฉ๋ฒ• ํ˜ธ์ถœ ์ „
ํ˜ธ์ถœ ์ „
196418 ๋…„.
์ธ์ˆ˜๋กœ ํ˜ธ์ถœ: 514229, 832040. ํ˜„์žฌ ๋ฒˆํ˜ธ = 1346269
์ธ์ˆ˜๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 832040, 1346269. ํ˜„์žฌ ๋ฒˆํ˜ธ = 2178309 ์ธ์ˆ˜๋กœ
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 1346269, 2178309. ํ˜„์žฌ ๋ฒˆํ˜ธ = 3524578
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 2178309, 3524578. ํ˜„์žฌ ๋ฒˆํ˜ธ = 5702887 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 3524578, 5702887. ํ˜„์žฌ ๋ฒˆํ˜ธ = 9227465 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 5702887, 9227465. ํ˜„์žฌ ๋ฒˆํ˜ธ = 14930352 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ
ํ˜ธ์ถœ ์ „: 9 227465, 14930352. ํ˜„์žฌ ๋ฒˆํ˜ธ = 24157817
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 14930352, 24157817. ํ˜„์žฌ ๋ฒˆํ˜ธ = 39088169 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 24157817, 39088169. ํ˜„์žฌ ๋ฒˆํ˜ธ = 63245986 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „
: 39088169, 6 3245986. ํ˜„์žฌ ๋ฒˆํ˜ธ = 102334155
์ด์ „ ๋ฐฉ๋ฒ• ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ํ˜ธ์ถœ: 63245986, 102334155. ํ˜„์žฌ ๋ฒˆํ˜ธ = 165580141
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 102334155, 165580141. ํ˜„์žฌ ๋ฒˆํ˜ธ = 267914296
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 165580141, 267914296. ํ˜„์žฌ ๋ฒˆํ˜ธ = 433494437 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 267914296, 433494437. ํ˜„์žฌ ๋ฒˆํ˜ธ = 701408733 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 433494437, 701408733. ํ˜„์žฌ ๋ฒˆํ˜ธ = 11
34903170
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „: 701408733, 1134903170. ํ˜„์žฌ ๋ฒˆํ˜ธ = 1836311903
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 701408733, 113490317
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 433494437, 701408733 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 267914296, 433494437 ์ธ์ˆ˜๊ฐ€
์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 165580141, 267914296
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 102334155, 165580141
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 63245986, 102334155
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 39088169, 63245986
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 24157817, 39088169
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 14930352, 24157817
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 9227465, 14930352 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 5702887, 9227465 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„
: 3524578
, 5702887 ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„ : 2178309, 3524578
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 1346269, 2178309
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 832040, 1346269
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 514229, 832040 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„
: 317811, 514229
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 196418, 317811
ํ›„ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: 121393, 196418
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 75025, 121393
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 46368, 75025
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 28657, 46368
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 17711, 28657
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 10946, 17711
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 6765, 10946 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 4181, 6765 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„ : 2584, 4181
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 1597, 2584
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 987, 1597
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 610, 987
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 377, 610 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 233, 377
์ดํ›„ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: 144, 233
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 89, 144
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 55, 89
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 34, 55 ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 21, 34
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„: 13, 21
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„: 8, 13
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„: 5, 8
์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„: 3, 5 ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„
: 2, 3 ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ
๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ›„ : 1, 2
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 1, 1
์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ›„: 0, 1

๋‹ค์Œ์€ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์‹œ๊ฐํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด๋ด…์‹œ๋‹ค: printFibonacciWithCondition ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ ํ•ฉํ•˜๋‹ค๋ฉด ์ด๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ƒˆ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ printFibonacciWithCondition ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ํ•œ ์ด๋ฅผ "์žฌ๊ท€ ํ•˜๊ฐ•"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๋ฐ˜ํ™˜๋˜๋ฉด ํ˜ธ์ถœ ์Šคํƒ์ด "ํ’€๋ฆผ" ์ƒํƒœ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํฅ๋ฏธ๋กœ์šด ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ์žฌ๋ฃŒ๋ฅผ ๋” ์ž˜ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์ž‘์—…์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ž‘์—…์€ Integer.MAX_VALUE ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด ์ž‘์—…์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ ํ˜„์žฌ ์ˆซ์ž๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ฒซ ๋ฒˆ์งธ ์˜ˆ์—์„œ "ํ•˜๊ฐ•" ์ค‘์— ๊ณ„์‚ฐ๋œ ์ˆซ์ž๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์ง€๋งŒ ์ด์ œ "๋งจ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ„" ๋‹ค์Œ "๋‹ค์‹œ ์˜ฌ๋ผ๊ฐ€๋Š” ์ค‘"์— ์ˆซ์ž๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก , ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ์žฌ๊ท€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ์‹œํ€€์Šค์˜ ๋‘ ์ดˆ๊ธฐ ์ˆซ์ž(0๊ณผ 1)๋ฅผ ํ‘œ์‹œํ•œ ํ›„ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด๋ฐฉ๋ฒ•.


public class Fibonacci {
    public static void main(String[] args) {
        printFibonacciWithCondition(0, 1);
        System.out.println(1);
        System.out.println(0);
    }

    private static void printFibonacciWithCondition(long penultimate, long previous) {
        long current = penultimate + previous;
        if (current > Integer.MAX_VALUE) {
            return;
        }
        printFibonacciWithCondition(previous, current);
        System.out.println(current);
    }
}
    

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1836311903
1134903170
701408733
433494437
267914296
165580141
102334155
63245986
39088169
24157817
14930352
9227465
5702887
3524578
2178309
1346269
832040
514229
317811
196418
121393
75025
46368
28657
17711
10946
6765
4181
2584
1597
987
610
377
233
144
89
55
34
21
13
8
5
3
2
1
1
0