2013-10-26 78 views
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++。

+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

你可以试试这个: -

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

也是正确的外轮山

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

如果数组有n元素,则最后一个元素的索引是n-1。纠正你somma功能是这样的:

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

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

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

  1. 变量声明中forfor(int i=0; i<4; i++)不是由C89,只有C99和C允许++ 。可能DevC++会编译它,因为该文件被视为C++,但您应该知道它不会在GCC上编译,除非您使用-std=c99开关。
  2. getch是Windows特有的。在POSIX系统上,改用getchar
+0

但跳过[0]? –

+0

是的,你是对的。我已经更新了递归的退出条件。 –

+0

噢,现在好了;)I + 1'd –