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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2012, 19:18   #1
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
Счастье Вопрос

Что такое рекурсивный обход???
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 15.11.2012, 22:46   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В самом примитивном варианте - обход, использующий рекурсию (да, это он).

Для примера, пусть у нас есть... да хотя бы массив целых чисел длины L. Мы хотим найти в нём самое большое число. Можно делать это с помощью цикла (полагаю, Вы знаете, как)... а можно решить задачу на основании следующего рассуждения:
1) Самый большой элемент массива длины 1 - его первый элемент (логично...).
2) Если у нас массив длиннее 1, то самый большой его элемент - это максимум из первого и самого большого элемента из остальных (опять же логично).
А теперь пишем программу:
Код:
int RecursiveMax(int* array, size_t L){
  if(L==1) return array[0]; //(1)
  return max(array[0], RecursiveMax(array+1, L-1)); //(2)
}
Чем этот способ полезен? Тем, что если нам нужно найти максимальный элемент, скажем, в дереве (структуре данных, в которой за элементом следует не один, а несколько других элементов), простым циклом отделаться уже не получится... а вот логика выше применима почти без изменений:
Код:
int RecursiveMax(Tree* node){
  int ret = node->item;
  if(node->left!=NULL) ret = max(ret, RecursiveMax(node->left));
  if(node->right!=NULL) ret = max(ret, RecursiveMax(node->right));
  return ret;
}
Отдельным интересным свойством рекурсивных алгоритмов является то, что, как правило, их можно написать, не используя оператора присваивания в явном или неявном виде - то есть, в пределах одного вызова одной функции любая переменная не меняет своего значения.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по c# welcomeTo Помощь студентам 0 20.11.2010 17:30
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10