Инструкции

Справочный раздел

В этом разделе Вы найдетё инструкции, справочники, и всевозможные хелпы по использованию программного обеспечения.

Разделы инструкций

В сети

Пользователей: 219
Из них просматривают:
Аналоги: 109. Даташиты: 33. Инструкции: 8. Магазин: 1. Новости: 2. Профиль пользователя: 1. Форум: 65.
Участников: 2
Гостей: 217

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Рекурсия

Особый случай использования функции - это обращение к ней изнутри ее тела. Такой метод получил название рекурсивного вызова функции, или рекурсии.
Существует большое количество алгоритмов, которые чрезвычайно сложно реализуются обычным, нерекурсивным образом, в то время как с использованием рекурсии решение получается простым и красивым. Среди них, например, различные алгоритмы сортировки, поиска и т.п.
Рассмотрим пример рекурсивной функции для вычисления факториала числа:

 

long long factorial (unsigned char N){

        long long result;

        if (N != 0) result = N * factorial(N-1);

        else result = 1;

        return result;

}

           
Рекурсивный алгоритм подсчета факториала заключается в том, чтобы обращаться самому к себе, но со значением входного числа на 1 меньше текущего значения, пока входное значение не станет равно нулю. Возможно, это не самый удачный пример эффективного рекурсивного алгоритма, однако он хорошо раскрывает главную опасность рекурсии.

 

Рекурсивный алгоритм подсчета факториала заключается в том, чтобы обращаться самому к себе, но со значением входного числа на 1 меньше текущего значения, пока входное значение не станет равно нулю. Возможно, это не самый удачный пример эффективного рекурсивного алгоритма, однако он хорошо раскрывает главную опасность рекурсии.

 
Дело в том, что все локальные переменные размещаются в ОЗУ, причем при каждом новом обращении к функции происходит выделение для них новой области памяти. Чем «глубже» происходит погружение в рекурсивные вызовы, тем больше расходуется памяти. Это легко может привести к полному исчерпанию доступного пространства ОЗУ во время расчета, и узнать об этом будет чрезвычайно проблематично, ведь Си для микроконтроллеров не содержит никаких средств контроля подобных ситуаций.

 
Поэтому, не смотря на всю привлекательность рекурсивных алгоритмов, использовать их можно лишь с большой осторожностью.

 

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

Интересно

Проводите пайку только при выключенном телевизоре.
В противном случае закоротив дорожки (даже кратковременно), Вы введете новые неисправности.