0

我有一个函数,它需要一个数组a[]及其长度n。我必须计算数组内数字的总和。我写了这个递归函数:

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

我这样称呼它main()

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;
}

如果数组包含array = [2; 4; 7; 5]printf 必须显示 18 (2+4+7+5)。顺便说一下函数返回88,你能帮帮我吗?

我正在使用 wxDevC++。

4

3 回答 3

1

您只读取数组中的前四个值。array[4]包含垃圾值

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

你的somma功能也是错误的。它总是会添加0for arr[0]

 if (n == -1) { return 0; } //change to this
于 2013-10-26T14:03:06.193 回答
1

你可以试试这个:-

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

同时纠正你的睡眠

 if (n == -1) 
 { 
    return 0; 
 }
于 2013-10-26T14:04:06.070 回答
1

如果一个数组有n元素,那么最后一个元素有 index n-1。像这样更正您的somma功能:

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

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

此外,您的代码还有两个(小)问题:

  1. C89 不允许在forhead in中声明变量,只有 C99 和 C++ 才允许。for(int i=0; i<4; i++)可能 DevC++ 编译它是因为该文件被视为 C++,但您应该知道它不会在 GCC 上编译,除非您使用-std=c99开关。
  2. getch是特定于 Windows 的。在 POSIX 系统上,请getchar改用。
于 2013-10-26T14:05:10.153 回答