Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 20:23   #1
Zapt1k
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 10
По умолчанию рекурсивная функция С++

Задание: Написать рекурсивную функцию вычисления количества четных элементов в целочисленном массиве {a[i]} где i=1,2,3.......n

Не могу понять как тут представить рекурсивную функцию. сделал набросок, но не думаю, что он правильный. просьба исправить код с++:

Код:
int sum(int a[],int n,int p)
{int i;
for (i=1;i<=n;i++)
if (a[i]%2=0) p=p+1;
}

Последний раз редактировалось Zapt1k; 12.05.2013 в 20:27.
Zapt1k вне форума Ответить с цитированием
Старый 12.05.2013, 20:31   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
int
sum(int *a, int n)
{
  --n;
  if (n < 0) {
    return 0;
  }
  return !(a[n] % 2) + sum(a, n);
}

//вызывать в основной программе
sum(a, n);
//n - количество элементов в массиве
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.05.2013, 20:35   #3
Zapt1k
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 10
По умолчанию

спасибо конечно, но мне не совсем понятна эта программа, соответственно преподу это не понравится. если кого то не затруднит, я бы хотел попросить исправленную версию моего кода, то есть соответственно без возвратов return
Zapt1k вне форума Ответить с цитированием
Старый 12.05.2013, 20:51   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
void
sum2(int *a, int n, int *p)
{
  --n;
  if (n >= 0) {
    *p += !(a[n] % 2);
    sum2(a, n, p);
  }
}
 
void
sum(int *a, int n, int *p)
{
  *p = 0;
  sum2(a, n, p);
}

//вызывать в основной программе
sum(a, n, &p);
printf("%d", p);
//n - количество элементов в массиве
//p - количество четных элементов
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.06.2013, 13:17   #5
zogi
Новичок
Джуниор
 
Регистрация: 05.06.2013
Сообщений: 4
По умолчанию


подскажите 7ое пожалуйста

Последний раз редактировалось zogi; 05.06.2013 в 13:19.
zogi вне форума Ответить с цитированием
Старый 05.06.2013, 13:29   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

zogi, в последнем коде заменить *p += !(a[n] % 2); на *p += (a[n] > 0 && a[n] % 2); или в предпоследнем заменить return !(a[n] % 2) + sum(a, n); на
return (a[n] > 0 && a[n] % 2) + sum(a, n);.
На будущее - создавайте свою тему, вида: вот условие, вот решение, работает так-то и так-то, а нужно так-то и так-то.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.06.2013 в 13:33.
BDA вне форума Ответить с цитированием
Старый 05.06.2013, 13:41   #7
zogi
Новичок
Джуниор
 
Регистрация: 05.06.2013
Сообщений: 4
По умолчанию

funct (int a[],int n)
{int i;
if (n==0) k=0;
if (a[i]>0)&&(a[i]%2!=0) return k++;
else return funct (a,n-1)
}


я написал так, но здесь нужно упомянуть k, я не знаю где
zogi вне форума Ответить с цитированием
Старый 05.06.2013, 13:44   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
int
sum(int *a, int n)
{
  --n;
  if (n < 0) {
    return 0;
  }
  return (a[n] > 0 && a[n] % 2) + sum(a, n);
}

//вызывать в основной программе
sum(a, n);
//n - количество элементов в массиве
Не нужно вводить лишних переменных (они только память будут занимать).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивная функция на C++ spam12 Помощь студентам 3 09.02.2012 16:22
рекурсивная функция)) vedro-compota Общие вопросы Delphi 8 16.04.2010 14:39
Рекурсивная функция Trinity13 Помощь студентам 8 14.02.2010 18:44