2# | 재 귀(Recursion)

2018. 12. 16. 23:41




재귀 








팩토리얼



1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
 
int Factorial(int n)
{
    if (n==0 )
        return 1 ;
    else 
        return n* Factorial (n-1);
                
}
cs




피보나치 수열


0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...



1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int Fibo(int n)
{
    if (n == 1)
        return 0 ;
    else if ( n == 2 ) 
        return 1
    else 
        return Fibo(n-1)+Fibo(n-2);
            
}
cs




하노이 타워



제약 조건 : 원반은 한 번에 하나씩만 옮길 수 있다.

옮기는 과정에서 작은 원반 위에 큰 원반을 옮길 수는 없다.







하노이 타워의 문제의 해결


1. 작은 원반 n-1 개를 A --> B로 이동 

2. 큰 원반 1개를 A --> C로 이동

3. 작은 원반 n-1개를 B ->C 로 이동  






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
 
int HanoiTower(int num, char from , char by , char to)
{
    if (num == 1)
    {
        printf("원반을1 을 %c 에서 %c로 이동 \n ", from , to);
        
    }
    else
    {
        HanoiTower(num-1,from,to,by);
        printf("원반 %d를 %c -> %c 로 이동 \n", num,from,to);
        HanoiTower(num-1,by,from,to);
        
    }
}
int main(void)
{
    // 막대 A의 원반  3개를 막대 B 를 경유하여 막대 C로 옮기기 
    HanoiTower(3,'A','B','C');
    return 0
}
cs








+ Recent posts