2015-02-02 2 views
-1

배열의 요소를 요약하려고합니다. 내 코드를 테스트 할 때 합계는 항상 하나씩 떨어져 있습니다. 예를 들어, 20, 40, 30을 입력하면 90 대신 89가됩니다. 내가 뭘 잘못하고 있는지 정확히 알지 못합니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것은 좋을 것입니다! 의 당신이 int[] A = {1}를 합산되어 있다고 가정 해 봅시다 하고, 다음과 같이 당신의 재귀 함수 호출을 확장 :배열 합계의 재귀 오류

public static void main(String[] args){ 
    int size = kbd.nextInt(); 
    int [] myArray = new int [size] 
    //user inputs the elements of array 
    for(int i =0; i<myArray.length; i++){ 
     myArray[i]= kbd.nextInt(); 
    } 
    int total = sumNum(myArray,0, myArray.length-1) 
    System.out.println("The sum is"+ total); 
} 

public static int sumNum(int [] array, int begin, int end){ 
    if(begin > last) { 
     return -1; 
    } 
    else { 
     int total = sumNum(array, begin +1, end)+ array[first]; 
    } 
} 
+2

은'반환 -1' 무엇을하고 있습니까? 배열 요소가 부족하면 실제로 총계에 영향을 미치지 않으므로 0을 반환해야합니다. – ryanyuyu

+0

코드에 구문 오류가 많이 포함되어 있습니다. 코드를 컴파일 가능하게 만들면 문제가 해결 될 수 있습니다. 디버거와 배열의 작은 크기를 사용하여 근본 원인을 찾으십시오. – bedrin

+0

여기에 모든 구문을 사용하지 않고 코드를 작성했습니다. 나는이 코드를 실행하고 컴파일하고있다. 난 그냥 논리 오류를 알아내는 데 도움이 필요합니다 – user3582249

답변

1

기본 케이스가 잘못 :

sumNum(A, 0, 0) = sumNum(A, 1, 0) + A[0] = -1 + A[0] 

이 감사

은 내가 지금까지 무엇을 가지고

당신은 결국 sumNum(A, 1, 0)을 반환하고 -1을 반환하며 우리는 결과적으로 A[0] - 1을 얻습니다.

올바른 해결 방법은 sumNum(A, 1, 0)입니다. 0입니다.

+0

정말 고마워요! – user3582249

+0

@ user3582249 환영합니다 :) –

0

나는이에 개선 꼬리없는 재귀하지만에 대해 어떻게 할 수 있는지 해요 :

public class Recurs { 

    public static void main(String[] args){ 

     int [] myArray = new int[]{20,40,30} ; 

     int total = sumNum(myArray,0); 

     System.out.println("The sum is "+ total); 
    } 

    public static int sumNum(int [] array, int begin){ 
     if(begin == array.length) { 
      return 0; 
     } 
     else { 
      return sumNum(array, begin + 1) + array[begin]; 
     } 
    } 

}