我有一个带有数组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 ++。
答案 0 :(得分:1)
您只是读取数组中的前四个值。 array[4]
包含垃圾值
for(int i=0; i<5; i++) //change to 5
{
scanf("%d", &array[i]);
}
您的somma
功能也有误。它会始终为0
添加arr[0]
。
if (n == -1) { return 0; } //change to this
答案 1 :(得分:1)
你可以试试这个: -
for(int i=0; i<=4; i++)
{
scanf("%d", &array[i]);
}
同样纠正你的somma
if (n == -1)
{
return 0;
}
答案 2 :(得分:1)
如果数组包含n
个元素,则最后一个元素具有索引n-1
。像这样纠正你的somma
函数:
int somma(int a[], int n) {
if (n <= 0) {
return 0;
}
return a[n-1] + somma(a, n-1);
}
此外,您的代码存在两个(次要)问题:
for
for(int i=0; i<4; i++)
内的变量声明,只有C99和C ++。可能DevC ++编译它是因为该文件被视为C ++,但您应该知道它不会在GCC上编译,除非您使用-std=c99
开关。getch
是特定于Windows的。在POSIX系统上,请改用getchar
。