Инструкции

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

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

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

В сети

Пользователей: 97
Из них просматривают:
Аналоги: 34. Видео: 2. Галерея: 2. Даташиты: 20. Инструкции: 2. Магазин: 1. Новости: 11. Обзор: 2. Опросы: 1. Партнёры: 2. Программы: 1. Производители: 2. Профиль пользователя: 2. Расчёты: 1. Теги: 1. Торрент: 3. Форум: 8. Чат: 2.
Участников: 3
Гостей: 94

an , 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 меньше текущего значения, пока входное значение не станет равно нулю. Возможно, это не самый удачный пример эффективного рекурсивного алгоритма, однако он хорошо раскрывает главную опасность рекурсии.

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

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

 

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

Разное

Интересно

Если на шприц отсоса припоя надеть отрезок силиконовой трубки.
То работать шприц станет лучше,некоторое количество припоя просто останутся в трубке,откуда и удалить их проще,так что при взводе шприца меньше сыпятся на плату остатки припоя из шприца.