2016-12-01 3 views
0

первый пользователь здесь, надеюсь, что я не пропустил подобных вопросов к этому.Рекурсивная функция, в зависимости от количества шагов, дает разные ответы

Проблема, с которой я столкнулась, состоит в том, что мы должны написать код, который будет использовать рекурсивную функцию для принятия массива (array1 [n]), а затем создать второй массив (array2 [n]), в котором члены массива2 будут суммой всех оставшихся для них элементов в первом массиве, которые являются положительными. 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 + 1] на b [n] он вышел правильно. Еще раз спасибо, я пойду посмотреть, где мой код был неправильным. – Ammonium

+0

Я не понимаю, что вы говорите. – BLUEPIXY

+0

Я говорю, что array1 и array2 имеют размер n. В принципе, последний элемент array1 игнорируется. – Ammonium

Смежные вопросы