JAVA 반복, 재귀함수

2018. 3. 25. 22:16개발노트

반복함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public class Main {
 
    public static int factorial (int number) {
        
        int sum = 1;
        for(int i = 2; i<= number; i++)
        {
            sum *=i;
        }
        return sum;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        System.out.println("10 팩토리얼은" + factorial(10));
    }
 
}
 
cs


팩토리얼 ex)10 팩토리얼이라고 했을 때 10 * 9 * 8 ..... * 1


1
2
10 팩토리얼은3628800
 
cs


위의 반복함수를 재귀함수로 바꿔서 쓰면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public class Main {
 
    public static int factorial (int number) {
        
        if(number == 1)
            return 1;
        else
            return number * factorial(number - 1);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        System.out.println("10 팩토리얼은" + factorial(10));
    }
 
}
 
cs




반복함수로 피보나치수열 만들기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
public class Main {
    
    public static int fibonacci (int number) {
        
        int one = 1;
        int two = 1;
        int result = -1;
        if (number == 1)
        {
            return one;
        }
        else if (number == 2)
        {
            return two;
        }
        else
        {
            for(int i = 2; i < number; i++)
            {
                result = one + two;
                one = two;
                two = result;
            }
        }
        return result;
    }
    
    public static void main(String[]args) {
        
        System.out.println("피보나치 수열의 10번째 원소는" + fibonacci(10+ "입니다.");
        
    }
    
}
 
cs


결과 값


1
2
피보나치 수열의 10번째 원소는55입니다.
 

cs


재귀함수로 바꿔서 나타내면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public class Main {
    
    public static int fibonacci (int number) {
        if(number == 1)
        {
            return 1;
        }
        else if (number == 2)
        {
            return 1;
            
        }
        else
        {
            return fibonacci(number - 1+ fibonacci(number - 2);
            
        }
    }
    
    public static void main(String[]args) {
        
        System.out.println("피보나치 수열의 10번째 원소는" + fibonacci(10+ "입니다.");
        
    }
    
}
 
cs



반복함수보다 재귀함수가 코드는 짧지만


때에 따라서 많은 시간을 소요해야 결과 값을 얻을 수 있습니다.


예를들어 위의 피보나치 수열을 나타내려고 하면 중복되는 값이 많기때문에 

(피보나치수열은 누적 값을 구할 때 사용 ex) 5까지의 피보나치 수열은 1+1 = 2, 2+3=5......)

피보나치수열에 대한 이미지 검색결과