2016-12-01 74 views
0

第一次用户在这里,希望我没有错过任何类似的问题到这个。递归函数,根据步数,给出不同的答案

我遇到的问题是,我们应该编写代码,将使用递归函数来获取数组(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

请[代码格式正确(// prohackr112.tk/r/proper-c-formatting)。 –

回答

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; 
} 
+0

谢谢!这并不完全准确,因为我需要第二个数组具有相同数量的元素,但是在用b [n]替换b [n + 1]之后,它就出来了。再次感谢,我要去看看我的代码出错了。 – Ammonium

+0

我不明白你说的。 – BLUEPIXY

+0

我在说的是array1和array2的大小都是n。基本上,array1的最后一个元素被忽略。 – Ammonium