第一次在这里的用户,希望我没有错过任何类似的问题。
我遇到的问题是我们应该编写代码,使用递归函数来获取数组(array1 [n]),然后创建第二个数组(array2 [n]),其中成员array2的数量是第一个数组中保留给它们的所有元素的总和。 array2 [0]是= 0,array2 [1] = array1 [0],array2 [2] = array1 [0] + array1 [1],....
问题是,我一直在想一个算法,但我不断回到相同的代码,而且我不会比以前更难过。我想到了一些方法来改变递归以便修复它,但这让它更加破碎。
#include <stdio.h>
int sum(int array[], int tmp)
{
if(tmp < 0)
return 0;
else
return array[tmp] + sum(array, tmp-1);
}
int main()
{
int n;
scanf("%d",&n);
int a[n], b[n], i, j;
for(i = 0; i < n; i++)
{
scanf("%d",&a[i]);
if(a[i] < 0)
a[i] = 0;
}
b[0]=0;
for(i=n-1;i>0;i--)
{
int sum1 = 0;
for(j = i - 1; j >= 0; j--)
sum1 += sum(a,j);
b[i] = sum1;
}
for(i = 0; i < n; i++)
{
printf("%d ",b[i]);
}
return 0;
}
答案 0 :(得分:1)
试试这个:
#include <stdio.h>
int sum(int array[],int tmp){
if(tmp<0)
return 0;
else
return array[tmp] + sum(array, tmp-1);
}
int main(void){
int n;
scanf("%d",&n);
int a[n], b[n+1], i, j;
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
if(a[i] < 0)
a[i] = 0;
}
b[0] = 0;
for(i = 0; i < n; ++i){
b[i+1] = sum(a, i);
}
for(i = 0; i <= n; i++){
printf("%d ", b[i]);
}
puts("");
return 0;
}