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

Рекурсивная функция произведения элементов массива - C++

Восстановить пароль Регистрация
 
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 17:56     Рекурсивная функция произведения элементов массива #1
Здесь функция произведения "proizv" считает произведение всех элементов массива, как сделать её рекурсивной?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <conio.h>
#include <time.h>
#include <math.h>
int i;
using namespace std;
const int N=10;
 
void input(int a[N], int b[N], int n)
{
    
    for (int i=0;i<n;i++)
    {
        
        if (a[i]%2==0 && a[i]<0) 
        {
            a[i]=rand()%10-10;
            b[i]=a[i];
        }
        
    }
}
void output(int a[N], int b[N],int n)
{
    for (int i=0;i<n;i++)
        cout<<b[i]<<" ";
}
int proizv(int b[N], int n,int i)
{
int mult=1;
for (i=0;i<n;i++)
mult*=abs(b[i]);
return mult;
}
 
int main()
{
    int mult;
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    int a[N], b[N], c[N],n;
    cout<<"Введите количество элементов массива:";
    cin>>n;
    input(a,b,n);
    output(a,b,n);
    cout<<proizv(b,n,i);
_getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 17:56     Рекурсивная функция произведения элементов массива
Посмотрите здесь:

Вычислить сумму S = P1 + P2 произведения P1 четных элементов массива xi и произведения P2 четных элементов массива yi , i = 1, 2, 3 C++
Рекурсивная функция: вычислить среднее арефметическое элементов одномерного массива C++
C++ рекурсивная функция печати массива
C++ Рекурсивная функция. Посчитать среднее арифметическое элементов массива
C++ Рекурсивная функция для нахождения минимального элемента массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 18:16     Рекурсивная функция произведения элементов массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
int mul(int *arr, int n)
{
    if (!--n) return 1;
    return arr[n] * mul(arr, n);
}
 
int main()
{
    int arr[] {1, 2, 3, 4};
    cout << mul(arr, 4);
    return 0;
}
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
25.05.2013, 18:49     Рекурсивная функция произведения элементов массива #3
2Olivеr Плохой пример)), как минимум грубых 2 ошибки и плохой стиль написания).
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 18:52  [ТС]     Рекурсивная функция произведения элементов массива #4
C++
1
2
3
4
int proizv(int b[N], int i)
{
return b[i]*proizv(b,i);
}
вот так сделал, получился перегруз функции. что не так?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 19:33     Рекурсивная функция произведения элементов массива #5
stima, рекурсия - это вообще плохой стиль написания.

emiln00b, что не получается?

C++
1
2
3
4
5
6
const int N = 10;
int mul(int arr[N], int n)
{
    if (!--n) return 1;
    return arr[n] * mul(arr, n);
}
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 19:59  [ТС]     Рекурсивная функция произведения элементов массива #6
Olivеr,
Цитата Сообщение от Olivеr Посмотреть сообщение
if (!--n) return 1;
вот эту строчку не писал, поэтому не работало. Что она означает?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 20:19     Рекурсивная функция произведения элементов массива #7
emiln00b,
напишите так потому, что там ошибка. я сразу и не заметил
C++
1
2
3
4
5
int mul(int arr[N], int n)
{
    if (!n) return 1;
    return arr[n - 1] * mul(arr, n - 1);
}
Цитата Сообщение от emiln00b Посмотреть сообщение
вот эту строчку не писал, поэтому не работало. Что она означает?
это условие выхода из рекурсии
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 20:28  [ТС]     Рекурсивная функция произведения элементов массива #8
Еще проблема. Если в массиве есть одинаковые числа, то он их не считает. т.е если 3 2 1 3 выводит 6.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 20:31     Рекурсивная функция произведения элементов массива #9
у меня вывело 18. вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
int mul(int arr[4], int n)
{
    if (!n) return 1;
    return arr[n - 1] * mul(arr, n - 1);
}
 
int main()
{
    int arr[] {3, 2, 1, 3};
    cout << mul(arr, 4);
    return 0;
}
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 20:34  [ТС]     Рекурсивная функция произведения элементов массива #10
а все. понял
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
25.05.2013, 21:00     Рекурсивная функция произведения элементов массива #11
2Olivеr Рекурсия это всеголишь рекурсия). Под плохим стилем я имел ввиду:
C++
1
if (!--n)
Одну ошибку Вы исправили, найдете вторую?)
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 21:10     Рекурсивная функция произведения элементов массива #12
можно еще вот так сделать чтобы избавиться от одного лишнего входа в функцию, но больше ошибок я не вижу
C++
1
2
3
4
5
int mul(int *arr, int n)
{
    if (n == 1) return arr[0];
    return arr[n - 1] * mul(arr, n - 1);
}
Добавлено через 25 секунд
C++
1
if (!--n)
а это так... чтобы сэкономить одну строку))
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
25.05.2013, 21:16     Рекурсивная функция произведения элементов массива #13
И еще ... защиту от дурачков
C++
1
if (n <= 1)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 21:24     Рекурсивная функция произведения элементов массива
Еще ссылки по теме:

Рекурсивная функция поиска максимального элемента массива C++
C++ Рекурсивная функция для вычисления индекса максимального элемента массива
Рекурсивная функция печати массива C++

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

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.05.2013, 21:24     Рекурсивная функция произведения элементов массива #14
Цитата Сообщение от stima Посмотреть сообщение
И еще ... защиту от дурачков
C++
1
if (n <= 1)
Я хоть и не сторонник проверки корректности входных данных в самой функции (считаю, что корректность данных должен обеспечивать сам программист, тому пример реализация STL'овских функций), но в данном случае это будет очень кстати
Yandex
Объявления
25.05.2013, 21:24     Рекурсивная функция произведения элементов массива
Ответ Создать тему
Опции темы

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