Форум программистов, компьютерный форум CyberForum.ru

Сумма элементов массива рекурсивно - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
08.11.2012, 10:25     Сумма элементов массива рекурсивно #1
Опять все сначала((. Задача: соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 10:25     Сумма элементов массива рекурсивно
Посмотрите здесь:

Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х[N]; s1 u k2 - сумма C++
C++ Произведение n последних элементов массива рекурсивно
Сумма положительных элементов, произведение элементов массива C++
C++ Сумма произведений рекурсивно
C++ [C++] Рекурсивно вычислить произведение отрицательных элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
08.11.2012, 11:18     Сумма элементов массива рекурсивно #2
ваши хотя бы какие нибудь решения есть?
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
08.11.2012, 11:35  [ТС]     Сумма элементов массива рекурсивно #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int su(int a[3], int b)
{
    if (b!=0)
    {
    
    if (a[b]<0) 
        {
        a[b]=a[b-1]+su(a,b-1);
        printf("%d",a[1]);
        }
    }
return sum;
}
 
void main()
{
    int a[3] = {1,-1,5};
    su(a,3);
    _getch();
}
Но сам понимаю что хрень...
ZubSam
12 / 12 / 1
Регистрация: 24.03.2012
Сообщений: 238
08.11.2012, 12:34     Сумма элементов массива рекурсивно #4
Цитата Сообщение от fox_ Посмотреть сообщение
соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
то есть сначала , подсчитать кол-во элементов, потом заменить все элементы массива которые меньше нуля, суммой элементов которые меньше нуля или суммой всех элементов ?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
08.11.2012, 12:55     Сумма элементов массива рекурсивно #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int sum(int *a,int n){
    if(n>0)
        return a[n]+sum(a,n-1);
    else
        return a[n];
}
 
void main(){
    printf("Vvedite razmer massiva: ");
    int n;
    scanf("%d",&n);
    int *a=new int[n];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("Summa ravna: %d\n",sum(a,n-1));
    printf("Mas: ");
    for(int i=0;i<n;i++)
       printf("%d ",a[i]);
}
но как в ЭТОЙ ЖЕ рекурсивной функции поменять значения ума не приложу...
как бы не делался счет с последнего элемента или с первого вы сначала берете первый/последний элемент, это есть ваша сумма, потом берете второй/предпоследний элемент и у вас сумма эти 2 элемента и т.д т.е сумма все время меняется и на "обратном ходу" у рекурсии будет опять же разные суммы...
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
09.11.2012, 11:43  [ТС]     Сумма элементов массива рекурсивно #6
Цитата Сообщение от ZubSam Посмотреть сообщение
то есть сначала , подсчитать кол-во элементов, потом заменить все элементы массива которые меньше нуля, суммой элементов которые меньше нуля или суммой всех элементов ?
Нет заменить суммой всех элементов, элементы которые меньше нуля. И все в одной функции.



Добавлено через 1 минуту
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int sum(int *a,int n){
    if(n>0)
        return a[n]+sum(a,n-1);
    else
        return a[n];
}
 
void main(){
    printf("Vvedite razmer massiva: ");
    int n;
    scanf("%d",&n);
    int *a=new int[n];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("Summa ravna: %d\n",sum(a,n-1));
    printf("Mas: ");
    for(int i=0;i<n;i++)
       printf("%d ",a[i]);
}
но как в ЭТОЙ ЖЕ рекурсивной функции поменять значения ума не приложу...
как бы не делался счет с последнего элемента или с первого вы сначала берете первый/последний элемент, это есть ваша сумма, потом берете второй/предпоследний элемент и у вас сумма эти 2 элемента и т.д т.е сумма все время меняется и на "обратном ходу" у рекурсии будет опять же разные суммы...
Как подсчитать саму сумму то понятно, и это просто, а вот как в этой же заменить... не понимаю...

Добавлено через 21 час 57 минут
Так ни у кого не появилось идеи?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
09.11.2012, 11:54     Сумма элементов массива рекурсивно #7
Цитата Сообщение от fox_ Посмотреть сообщение
Так ни у кого не появилось идеи?
Какая тут идея? Вы нарисуйте себе схему, что происходит во время рекурсии вообще(не в этой программе).
Материал для размышлений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
void PrintNumber(int num){
    std::cout<<num<<std::endl;
    if(num>0)
        PrintNumber(num-1);
    std::cout<<num<<std::endl;
}
 
int main(){
    PrintNumber(10);
    std::cin.get();
}
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.11.2012, 11:58     Сумма элементов массива рекурсивно #8
Ну как, именно так, как и сказано: на обратном ходу. Главное, чтобы сумма обратно передавалась перед заменой, а сама замена начиналась после прохода рекурсии до конца массива.
C++
1
2
3
4
5
6
7
8
9
10
11
int sum_replace(int array[], int size, int sum = 0)
{
    if (size == 0) {
        return sum;
    }
    sum = sum_replace(array + 1, size - 1, *array + sum);
    if (*array < 0) {
        *array = sum;
    }
    return sum;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 00:18     Сумма элементов массива рекурсивно
Еще ссылки по теме:

Сумма элементов массива, у которых сумма индексов, на которых они находятся, - четное число. Проверить код C++
Произведение элементов массива с четными индексами, сумма элементов между первым и последним нулями C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
16.11.2012, 00:18  [ТС]     Сумма элементов массива рекурсивно #9
Спасибо всем. Очень помогло.
Yandex
Объявления
16.11.2012, 00:18     Сумма элементов массива рекурсивно
Ответ Создать тему
Опции темы

Текущее время: 23:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru