public static void rose() {
rose();
}
public static void cheol() {
young();
}
public static void young() {
cheol();
}
public static void egg() {
bird();
}
public static void bird() {
egg();
}
public static void eat() {
output();
}
public static void output() {
sleep();
}
public static void sleep() {
eat();
}
재귀 호출이 이루어질 때마다 문제는 점점 작아져야 하며,
재귀 호출이 끝이 나는 종료조건{}이 있어야 한다.
public static int factorial(int n) {
//if(n == 0)
if(n < 1) // 방어적 프로그래밍
return 1;
else
return n * factorial(n - 1);
}
120
package com.oracleclub.study;
public class Factorial {
private static int tab = 0;
private static void printTab(String message) {
for(int i=0; i<tab; i++) {
System.out.print("\t");
}
System.out.println(message);
tab++;
}
public static int factorial(int n) {
//if(n == 0)
if(n < 1) // 방어적 프로그래밍
return 1;
else
return n * factorial(n - 1);
}
public static int traceFactorial(int n) {
String debug = "factorial(" + n + ") -----> ";
if(n < 1) {
printTab(debug + "return 1\r\n");
return 1;
}
else {
printTab(debug + "return " + n + " * " + "factorial(" + (n-1) + ")");
return n * traceFactorial(n - 1);
}
}
public static void main(String[] args) {
System.out.println(traceFactorial(5));
}
}
factorial(5) -----> return 5 * factorial(4)
factorial(4) -----> return 4 * factorial(3)
factorial(3) -----> return 3 * factorial(2)
factorial(2) -----> return 2 * factorial(1)
factorial(1) -----> return 1 * factorial(0)
factorial(0) -----> return 1
120
package com.oracleclub.study;
public class Fibonacci {
public static int fibonacci(int n) {
if(n == 1 || n == 2)
return 1;
else
return fibonacci(n-1) + fibonacci(n-2);
}
public static void main(String[] args) {
System.out.println(fibonacci(5));
}
}
5
package com.oracleclub.study;
public class Hanoi {
public static void move(int from, int to) {
System.out.println(from + "에서" + to + "로 움직였습니다.");
}
public static void hanoi(int n, int from, int by, int to) {
if(n==1)
move(from ,to);
else {
hanoi(n-1, from, to, by);
move(from, to);
hanoi(n-1, by, from, to);
}
}
public static void main(String[] args) {
int height=4;
System.out.println("하노이 탑의 크기 : " + height);
hanoi(height, 1, 2, 3);
System.out.println("완료");
}
}
하노이 탑의 크기 : 4
1에서2로 움직였습니다.
1에서3로 움직였습니다.
2에서3로 움직였습니다.
1에서2로 움직였습니다.
3에서1로 움직였습니다.
3에서2로 움직였습니다.
1에서2로 움직였습니다.
1에서3로 움직였습니다.
2에서3로 움직였습니다.
2에서1로 움직였습니다.
3에서1로 움직였습니다.
2에서3로 움직였습니다.
1에서2로 움직였습니다.
1에서3로 움직였습니다.
2에서3로 움직였습니다.
완료