스택을 이용한 n값을 받아 1부터 n까지의 합계 구하기 



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
package test1;
 
public class StackProblem {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MySum1 mysum1 = new MySum1();
        System.out.println(mysum1.sum(10000)); // StackOverFlow Error
        
        MySum2 mysum2 = new MySum2();
        System.out.println(mysum2.sum(10000));
        
    }
}
 
// 1부터 n까지의 재귀함수 호출의 합
class MySum1{
    int sum(int n) {
        if (n < 2)
            return n;
        return n + sum(n - 1);
    }    
}
 
// 1부터 n까지의 반복을 사용한 합 
class MySum2{
    int sumResult = 0;
    int sum(int n){
        while(n >= 0) {
            sumResult += n--;
        }        
        return sumResult;
    }    
}
cs


스택을 이용해 n값을 받으면 1부터 n값까지의 합계를 출력하는 소스이다.


예) n을 10으로 받으면 1부터 10까지 더해 값이 55가 나온다.



출력 값은 다음과 같다.







합계를 구하는 메소드는 총 2개(재귀함수 호출 function, 반복을 사용한 function) 로 나눠서 만들었다.



1. 1부터 n까지 재귀함수를 호출한 합



n값이 큰 상태에서 재귀함수를 호출해 합계를 하면 어느정도 숫자가 커지게 되었을 때 




다음과 같이 StackOverflowError가 발생하게 된다.


스택에 모두 담지 못하기 때문에 에러가 발생한 것이다.




2. 1부터 n까지 반복을 사용한 합



2번째 메소드는 에러를 발생시키지 않고 값이 나오는 것을 확인했다.


마지막으로 해당소스를 첨부한다.


StackProblem.zip


+ Recent posts