数组整数的递归函数

时间:2013-10-26 14:00:31

标签: c recursion

我有一个带有数组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 ++。

3 个答案:

答案 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);    
}

此外,您的代码存在两个(次要)问题:

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