使用递归查找数组元素的总和

时间:2019-03-27 02:55:42

标签: c

使用递归查找数组中元素的总和

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, 
  system("pause") or input loop */
int max(int a[],int b,int x)
{
    if(a[x]!='\0'){
        return a[x]+max(a,b,x+1);
    }
}

int main()
{
    int a[30],b,x,c;
    scanf("%d",&b);
    for(x=0;x<b;x++){
        scanf("%d",&a[x]);
    }
    x=0;
    c=max(a,b,0);
    printf("%d",c);
}

输入:10        1 2 3 4 5 6 7 8 9 10
预期产量:55
实际输出:102

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, 
  system("pause") or input loop */
int max(int a[],int b,int x)
{
    if(x >= b)
        return 0;
    else {
        return a[x]+max(a,b,x+1);
    }
}

int main()
{
    int a[30],b,x,c;
    scanf("%d",&b);
    for(x=0;x<b;x++){
        scanf("%d",&a[x]);
    }
    x=0;
    c=max(a,b,0);
    printf("%d",c);
}


您只是错过了max()函数中的递归终止条件。

答案 1 :(得分:0)

您可以尝试此实现

#include <stdio.h>
#include <stdlib.h>

int sumation(int array[],int i) {
static int k = 0;
if(k == 10) {
    return 0;
}

else {
    ++k;
    return array[i] + sumation(array, i+1);
}
}
int main() {

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

sum = sumation(array, 0);
printf("Sum:: %d ", sum);
return 0;
}

您可以通过给定k的大小变量的值来更改其k的整数,或者在基本递归的情况下(如果有块的话)直接给定k大小的值。