2013-10-26 2 views
0

배열 a[] 및 길이가 n 인 함수가 있습니다. 배열 안의 숫자의 합을 계산해야합니다. 배열이 array = [2; 4; 7; 5]을 포함배열 정수에 대한 재귀 함수

int main() { 

int array[5], ris; 

printf("Type the numbers of the array: \n"); 

for(int i=0; i<4; i++) 
{ 
    scanf("%d", &array[i]); 
} 

printf("\nThe sum is: %d.", somma(array,4)); 

getch(); 
return 0; 
} 

경우 printf와 18 (2 + 4 + 7 + 5)를 제시해야합니다 :이 재귀 함수 쓴 :

int somma(int a[], int n) 
{ 
if (n == 0) { return 0; } 
else {return a[n] + somma(a, n-1);}  
} 

을 그리고 나는 이런 식으로 내 main()에 전화 . 함수가 88을 반환하는 방식으로, 나를 도울 수 있습니까?

wxDevC++를 사용하고 있습니다.

+0

'a [0]'도'somma'가 건너 뛴 배열의 요소이기도합니다. – Kninnug

답변

1

배열의 처음 네 개의 값만 읽는 중입니다. array[4]

for(int i=0; i<5; i++) //change to 5 
{ 
    scanf("%d", &array[i]); 
} 

귀하의 somma 기능도 잘못 쓰레기 값이 들어 있습니다. arr[0]에 항상 0이 추가됩니다.

if (n == -1) { return 0; } //change to this 
1

이 작업을 시도 할 수 있습니다 : - 배열 한 후 마지막 요소는 인덱스 n-1을 가지고 n 요소가있는 경우,

for(int i=0; i<=4; i++) 
{ 
    scanf("%d", &array[i]); 
} 

은 또한 당신의 외륜산을

if (n == -1) 
{ 
    return 0; 
} 
1

을 수정합니다. 이처럼 somma 기능을 수정 :

int somma(int a[], int n) { 
    if (n <= 0) { 
     return 0; 
    } 

    return a[n-1] + somma(a, n-1);  
} 

을 또한, 코드 두 (사소한) 문제가 있습니다 for(int i=0; i<4; i++)for 머리가 C89 만 C99 및 C에 의해 허용되지 않는 내부

  1. 변수 선언 ++ . 아마도 DevC++은 파일이 C++로 처리되기 때문에 컴파일하지만, -std=c99 스위치를 사용하지 않으면 GCC에서 컴파일되지 않습니다.
  2. getch은 Windows에 따라 다릅니다. POSIX 시스템에서는 대신 getchar을 사용하십시오.
+0

하지만 [0]은 건너 뜁니 까? –

+0

네, 맞습니다. 재귀를위한 종료 조건을 업데이트했습니다. –

+0

오 오케이 지금은 괜찮습니다;) 제가 +1했습니다 –