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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
#1

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

25.05.2013, 17:56. Просмотров 1282. Ответов 13
Метки нет (Все метки)

Здесь функция произведения "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();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция произведения элементов массива (C++):

Рекурсивная функция. Посчитать среднее арифметическое элементов массива - C++
Нужно с помощью рекурсивной функции посчитать среднее арифметическое элементов массива.

Рекурсивная функция вычисления умножения элементов одномерного массива - C++
Реализовать рекурсивную функцию вычисление умножения элементов одномерного массива, - текст задания. Нужно сделать с помощью функций, то...

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

Рекурсивная функция печати массива - C++
Напишите рекурсивную функцию печати массива, которая принимает массив и размер массива как аргументы и ничего не возвращает. Функция должна...

Рекурсивная функция печати массива - C++
Напишите рекурсивную функцию печати массива, которая принимает массив и размер массива как аргументы и ничего не возвращает. Фунцкия должна...

Рекурсивная функция поиска максимального элемента массива - C++
Написать рекурсивную функцию для вычисления максимального элемента массива из п элементов. выдает ошибки: использована...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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;
}
1
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
25.05.2013, 18:49 #3
2Olivеr Плохой пример)), как минимум грубых 2 ошибки и плохой стиль написания).
0
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);
}
вот так сделал, получился перегруз функции. что не так?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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);
}
0
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 19:59  [ТС] #6
Olivеr,
Цитата Сообщение от Olivеr Посмотреть сообщение
if (!--n) return 1;
вот эту строчку не писал, поэтому не работало. Что она означает?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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 Посмотреть сообщение
вот эту строчку не писал, поэтому не работало. Что она означает?
это условие выхода из рекурсии
0
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 20:28  [ТС] #8
Еще проблема. Если в массиве есть одинаковые числа, то он их не считает. т.е если 3 2 1 3 выводит 6.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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;
}
1
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
25.05.2013, 20:34  [ТС] #10
а все. понял
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
25.05.2013, 21:00 #11
2Olivеr Рекурсия это всеголишь рекурсия). Под плохим стилем я имел ввиду:
C++
1
if (!--n)
Одну ошибку Вы исправили, найдете вторую?)
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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)
а это так... чтобы сэкономить одну строку))
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
25.05.2013, 21:16 #13
И еще ... защиту от дурачков
C++
1
if (n <= 1)
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
25.05.2013, 21:24 #14
Цитата Сообщение от stima Посмотреть сообщение
И еще ... защиту от дурачков
C++
1
if (n <= 1)
Я хоть и не сторонник проверки корректности входных данных в самой функции (считаю, что корректность данных должен обеспечивать сам программист, тому пример реализация STL'овских функций), но в данном случае это будет очень кстати
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 21:24
Привет! Вот еще темы с ответами:

Рекурсивная функция определения минимального элемента массива - C++
Задан одномерный массив вещественных чисел. Написать программу определения минимального элемента массива x, содержащую рекурсивную функцию...

Вычислить сумму S = P1 + P2 произведения P1 четных элементов массива xi и произведения P2 четных элементов массива yi , i = 1, 2, 3 - C++
Пожалуйста решите. Вычислить сумму S = P1 + P2 произведения P1 четных элементов массива xi и произведения P2 четных элементов массива...

Рекурсивная функция для нахождения минимального элемента массива - C++
Помогите!Нужно написать рекурсивную функцию для нахождения минимального элемента массива

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2013, 21:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru