2016-09-15 2 views
-1

배열의 요소 합계를 재귀 적으로 계산하는 함수를 만들려고합니다. 나는 모든 반복을 배열을 반으로 줄이는 접근 방식을 시도하고 싶었다.배열을 반복하여 합계를 계산하십시오.

여기까지 제가 지금까지 가지고 있습니다.

int sumRec(int *A, int n, int start, int end) 
{ 
    if (start == end){ 
     return A[end]; 
    } 
    mid = n/2; 
    return sumRec(A, n, start, mid) + sumRec(A, n, start, mid + 1); 
} 

올바른 경로에 있습니까? 감사합니다. .

+0

을 할 수있는 유사한 코드가 작동하거나 그렇지? – Rotem

+0

'mid = (start + end)/2'를 볼 수 있습니다. 그리고 함수를 두 개로 나누는 것이 유용 할 수 있습니다 : 매개 변수 'A'와'n'을 사용하는 비 재귀 적이며 매개 변수 'A','start' 및'end'를 사용하여 재귀 적입니다. –

+0

사람들은 왜 코드를 사용해 보려고 두려워합니까? 누구도 테스트 할 빈 프로젝트를 만드는 것을 생각하지 않습니까? 그들은 ideone.com과 같은 샌드 박스를 알지 못합니까? – kfsone

답변

1

함수에 n을 전달할 필요는 없습니다. 필요하지 않습니다. 현재 프로그램은 무한 재귀로 실행됩니다.

당신은

mid = (start+end)/2;

코드에서 많은 오류가 사용할 수 있습니다.

다음 작업

int sumRec(int *A, int start, int end) 
{ 
    if (start <= end) 
    { 
     int mid = (start+end)/2; 
     return A[mid] + sumRec(A,start, mid-1) + sumRec(A,mid+1,end); 
    } 
    return 0; 
} 
+0

[꼬리와 비 - 꼬리 재귀] (https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)를 기반으로 최적화를 고려하는 것이 좋습니다. 예에서 재귀 호출이 반환 된 후에 계산이 수행됩니다. – PRP

관련 문제