순환(Recursion)이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.
int factorial(int n) {
if (n <= 1) return(1);
else return (n * factorial(n - 1);
}
반복(Iteration)이란 for나 while 등의 반복 구조로 되풀이하는 방법이다.
int factorial_iter(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
double power_iter(double x, int n) {
double result = 1.0;
for (i = 0; i < n; i++) {
result = result * x;
}
return result;
}
double power(double x, int n) {
if (n == 0) return 1;
if (n % 2 == 0) return power(x * x, n / 2);
return x * power(x * x, (n - 1) / 2);
}
int fib_iter(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int pp = 0;
int p = 1;
int result = 0;
for (int i = 2; i <= n; i++) {
result = p + pp;
pp = p;
p = result;
}
return result;
}
int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return (fib(n - 1) + fib(n - 2));
}
void hanoi_tower(int n, char from, char tmp, char to) {
if (n == 1) System.out.printf("원판 1을 %c에서 %c로 옯긴다.\n", from, to);
else {
hanoi_tower(n - 1, from, to, tmp);
printf("원판 %d을 %c에서 %c로 옮긴다.\n", n, from, to);
hanoi_toewr(n - 1, tmp, from, to);
}
}