스택을 이용한 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번째 메소드는 에러를 발생시키지 않고 값이 나오는 것을 확인했다.
마지막으로 해당소스를 첨부한다.
'전체 > 알고리즘' 카테고리의 다른 글
문자열 거꾸로 출력하기 (0) | 2017.12.13 |
---|---|
최대공약수 최소공배수 구하기 (0) | 2017.12.13 |
하노이의 탑 구현 (0) | 2017.12.12 |
자바 배열 최대값 구하기, 배열 중복되는 값 구하기 (0) | 2017.12.12 |
피보나치 수열 구현 두가지 방법 (0) | 2017.12.11 |