์ข ๋ฃ ์กฐ๊ฑด์ด ์๋ ์ฌ๊ท ์ฝ๋์ ์
์ฌ๊ท ๋ฌธ์ ๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด ํผ๋ณด๋์น ์๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ํผ๋ณด๋์น ์์ด์ ์ฒ์ ๋ ์ซ์๊ฐ 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๊ฐ์ ์ซ์๋ฅผ ๊ณ์ฐํ ํ ๋ค์์ ์ป์ต๋๋ค.
์ง๊ธ์ 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);
}
}
}
์ด ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
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);
}
}
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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
GO TO FULL VERSION