Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прошу помощи с рекурсией, Сделал итеративно, а в рекурсию не получ 
V
    Опции темы
Killer_13
Дата 17.5.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



сделал необходимые мне действия итеративно, теперь необходимо это сделать рекурсивной функцией и узнать сколько раз вызывается функция, а последнее слово рекурсивной функции должно быть "stack owerflow", сижу мудрю, - не получается.

функция
Код

iteration(divid,divis);
 

Код

int iteration (unsigned int x, unsigned int y)
{
unsigned int z;
int i=0; 
z=x;
    do{
    z=z-y;
    i++;
    }while(z>=y);
    
if (z==0)
return printf("\nEin Ergebnis=%d\nrest=0\n",i);
 else 
return printf("\nEin Ergebnis=%d\n rest=%u\n",i,z);
}

PM MAIL   Вверх
bsa
Дата 18.5.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Killer_13, А ты вообще знаешь, что такое рекурсия? Если бы знал, то не создавал здесь тему. Рекурсия - это когда функция вызывает саму себя (прямо или косвенно):
Код
void recurseCount(int x)
{
    printf("\b\b\b\b\b\b\b\b%7i ", x);
    recurseCount(x+1);
}

int main()
{
    recurseCount(0);
    return 0;
}

PM   Вверх
gosn1ck
Дата 18.5.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.4.2009

Репутация: 1
Всего: 1



Killer_13, а вы уверены, что z когда-нибудь будет равен 0 ?
поищите пример с нахождением факториала smile 
отправляйте в вашу функцию ссылку i, чтобы найти количество вызовов   smile
PM MAIL ICQ   Вверх
artsb
Дата 18.5.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Killer_13, gosn1ck прав, z никогда не будет равно 0.

Цитата(gosn1ck @  18.5.2009,  13:02 Найти цитируемый пост)
поищите пример с нахождением факториала 

Да зачем искать smile. Вот:
Код

int factorial(int x)
{
  if(x < 0) return 0;
  if(x <= 1) return 1;
  return (x * factorial(x - 1));
}

int main()
{
cout << factorial(5);
}


Это сообщение отредактировал(а) artsb - 18.5.2009, 14:14


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Soah
Дата 18.5.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



Цитата(artsb @  18.5.2009,  13:57 Найти цитируемый пост)
gosn1ck прав, z никогда не будет равно 0.


 smile 

P.S. iteration(9, 9);
PM MAIL   Вверх
artsb
Дата 18.5.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(Soah @  18.5.2009,  14:09 Найти цитируемый пост)
smile 

Действительно, что-то не обратил внимание, что там do...while и условие z>=y. Сори! smile



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
azesmcar
Дата 18.5.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(artsb @  18.5.2009,  13:57 Найти цитируемый пост)
if(x == 0) return 1;

if(x <= 1) return 1;
одним вызовом меньше, плюс не будет бесконечной рекурсии при передаче отрицательного числа.

Добавлено через 1 минуту и 44 секунды
Цитата(Killer_13 @  17.5.2009,  17:55 Найти цитируемый пост)
сделал необходимые мне действия итеративно

а какие действия необходимы это мы догадаться должны?
PM   Вверх
artsb
Дата 18.5.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(azesmcar @  18.5.2009,  14:15 Найти цитируемый пост)
одним вызовом меньше, плюс не будет бесконечной рекурсии при передаче отрицательного числа.  

А я уже подправил  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Killer_13
Дата 18.5.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Izwenite, netu russkoy raskladki. :(

Gospoda mne nushno sdelat delenie dwux chisel bez ispolsowanija "/" ili "%".

Funkciyu nushno sdelat 2 sposobami: ITERATIWNO i REKURSIWNO!

Iteratiwno ja sdelal, a kak eto perewesti w rekursiju ne znaju, znaju teoreticheski, no ne poluchaetsa, wot i proshu pomoshi.

Perewesti funkciju s iteratiwnogo predstawlenija w REKURSIJU.

Nadejus, teper wi mena pojmete.

Spasibo.
PM MAIL   Вверх
azesmcar
Дата 18.5.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Killer_13, 

На форуме есть функция - Транслит.

Код

typedef std::pair<unsigned int, unsigned int> ipair;


Код

ipair divide_i(unsigned int x, unsigned int y)
{
    int c = 0;
    while (x >= y)
    {
        x -= y;
        ++c;
    }
    return ipair(c, x);
}

вот ваша первая функция - доведенная до нормального вида..
Код

ipair divide_r(unsigned int x, unsigned int y)
{
    static int c = 0;
    if (x >= y)
    {
        ++c;
        return divide_r(x - y, y);
    } else
    {
        ipair res(c, x);
        c = 0;
        return res;
    }
}

это таже самая функция - только работает рекурсивно.
Вызывать так
Код

ipair m = divide_r(10, 2);
std::cout << m.first << " " << m.second << std::endl;

не забываем 
Код

#include <iostream>
#include <utility>


Это сообщение отредактировал(а) azesmcar - 18.5.2009, 14:56
PM   Вверх
Killer_13
Дата 18.5.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



xmmm, pasibo, nadeyus eto moshno logicheski perepisat na jazik "C" et ja kak ponal "C++" smile
PM MAIL   Вверх
azesmcar
Дата 18.5.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Killer_13, 
user posted image
читать невозможно

Цитата(Killer_13 @  18.5.2009,  14:54 Найти цитируемый пост)
xmmm, pasibo, nadeyus eto moshno logicheski perepisat na jazik "C" et ja kak ponal "C++" smile 

да, это С++, перевести не сложно там, принцип посмотрите просто.
PM   Вверх
artsb
Дата 18.5.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Код

unsigned int iteration (unsigned int x, unsigned int y)
{
  if(x < y) return 0;
  return (1 + iteration(x-y, y));
}


Это сообщение отредактировал(а) artsb - 18.5.2009, 15:06


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Killer_13
Дата 18.5.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



слошновато с "С++", например как перевести ето на "С"
Код

typedef std::pair<unsigned int, unsigned int> ipair;


ето прототип или... smile  smile  smile 

Не серчайте пошалуйста я толко очен хочу научится, читаю много и пробую, но не щсе приходит с первого раза. :(
PM MAIL   Вверх
azesmcar
Дата 18.5.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



artsb

Вообще-то ему надо было вернуть оба (/ и %).

Код

void divide_r(unsigned int x, unsigned int y)
{
    static int c = 0;
    if (x >= y)
    {
        ++c;
        divide_r(x - y, y);
    } else
    {
        printf("Ein Ergebnis=%d\nrest=%d\n",c, x);
        c = 0;
    }
}

вот вам на Си, в стиле вашей функции.

Это сообщение отредактировал(а) azesmcar - 18.5.2009, 15:13
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.4579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.