전체/알고리즘
n값을 받아 1부터 n까지의 합계 구하기
effortDev
2017. 12. 11. 17:49
스택을 이용한 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번째 메소드는 에러를 발생시키지 않고 값이 나오는 것을 확인했다.
마지막으로 해당소스를 첨부한다.