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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсия, рекурсия  
:(
    Опции темы
danilkramatorsk
Дата 28.4.2013, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



объясните пожалуйста, как работает здесь рекурсия 
Код
#include <iostream>
using namespace std;

void someFunction ( int [], int, int );

int main ()
{
 const int arraySize = 10;
 int a[arraySize] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 int poisk;
 cin >> poisk;
 cout << "The values in the array are:" << endl;
 someFunction( a, poisk, arraySize );
 cout << endl;
 
 system ("Pause void");
 return 0;
     
}

void someFunction ( int b[], int current, int size )
{
        if ( current < size )
        {  
        someFunction ( b, current + 1, size ); /
        cout << b[ current ] << " " << endl;
        } 
}


current +1 для чего, почему при выводе на экран ( poisk = 0 ) выводится массив в обратном порядке
ведь при ( poisk = 0 ) current = 1 b[ 1 ]= 2;
спасибо 

Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 30.4.2013, 07:23
PM MAIL   Вверх
NightmareZ
Дата 28.4.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


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

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



Цитата(danilkramatorsk @  28.4.2013,  12:40 Найти цитируемый пост)
current +1 для чего

Для того, чтобы увеличивать индекс текущего элемента на единицу.

Цитата(danilkramatorsk @  28.4.2013,  12:40 Найти цитируемый пост)
почему при выводе на экран ( poisk = 0 ) выводится массив в обратном порядкеведь при ( poisk = 0 ) current = 1 b[ 1 ]= 2;спасибо 

Потому что в функции someFunction происходит сначала рекурсивный вызов самой себя с индексом current+1, а уже потом вывод элемента с текущим индексом current.
Так дойдя до самого дна ( когда перестанет выполняться условие if ( current < size ) ), будет выполнен сначала вывод для current == size - 1, затем выход в функцию уровнем выше, вывод для current == size - 2 и т.д. вплоть до current == poisk.



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
danilkramatorsk
Дата 28.4.2013, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



NightmareZ
Цитата(NightmareZ @  28.4.2013,  13:54 Найти цитируемый пост)
Так дойдя до самого дна ( когда перестанет выполняться условие if ( current < size ) ), будет выполнен сначала вывод для 
Цитата

current == size - 1
, затем выход в функцию уровнем выше, вывод для current == size - 2 и т.д. вплоть до current == poisk.

то есть будет действовать так poisk = 0;
current = 1; потом = 2, 3 и.т.д
Но все равно не понял откуда появляется обратный порядок... 
откуда current = 1; потом = 2, 3 и.т.дcurrent = 1; потом = 2, 3 и.т.д
Но все равно не понял откуда появляется обратный порядок... Но все равно не понял откуда появляется обратный порядок... 
откуда 
Цитата

current == size - 1

если у меня его нет. Видимо не понял как именно работает, если можно более подробно 
что является первым шагом вторым...

спасибо)
PM MAIL   Вверх
baldina
Дата 28.4.2013, 18:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(danilkramatorsk @  28.4.2013,  13:40 Найти цитируемый пост)
void someFunction ( int b[], int current, int size )
{
        if ( current < size )
        {  
        someFunction ( b, current + 1, size ); /
        cout << b[ current ] << " " << endl;
        } 
}

попробуй так:
Код
void someFunction ( int b[], int current, int size )
{
    if ( current < size )
    {  
      cout << b[ current ] << " " << endl;
      someFunction ( b, current + 1, size ); /
    } 
}


Добавлено через 7 минут и 46 секунд
вот смотри, такой вызов: someFunction (b, 0, 3) приводит к такой последовательности 

Код

someFunction (b, 0, 3)
  0 < 3
     someFunction (b, 1, 3)
        1 < 3
           someFunction (b, 2, 3)
              2 < 3
                 someFunction (b, 3, 3)
                    3 < 3 // ложь
                    return
                 cout << b[2]
              return
           cout << b[1]
        return
     cout << b[0]
  return

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


Шустрый
*


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

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



baldina, отлично, понял! Спасибо большое!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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