使用递归查找数组中元素的总和
#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
答案 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大小的值。