2016-12-01 109 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