Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Что такое “рекурсивное программирование”?

#теория


Почитал я оглавление от книги 'Введение в рекурсивное программирование'

Но так и не понял что такое рекурсивное программирование. 

Кроме того что это чуть меньше кода 

// рекурсивная функция
int sum_first_natyrals(int n)
{
    if(n==1)
        return 1;
    else
        return sum_first_natyrals(n-1) + n;
}


И чуть больше сложности.

// не рекурсивная функция
int sum_first_natyrals(int n)
{
    int s_f_n =0; 
     if(n==1)
        return 1;
    else
        for (int i = n; i <0; i--)
             s_f_n += i;
        return  s_f_n;
}


Также помню что на собеседованиях этому методу программирования уделяют внимание. 



Учитывая что по сути вызов функции  (не единичный, а частый ) лично по мне уже представляться
как "рекурсия". Либо это маркетинговый ход типа "масла масленого"  либо как я видел
на крекерах надпись : "подходит для употребления с хумусом и моцарелой". Намного маркетинговей
звучит, в отличие от такого более точного написания : "подходит для употребления с
гороховой кашей и сыром".
    


Ответы

Ответ 1



Некоторые алгоритмы запрограммированные рекурсивно в самом деле будут более изящны, нежели их итеративные аналоги. А вот на практике к рекурсивным реализациям стоит подходить осторожно (и вовсе не из-за стека), поскольку такие программы обычно сложнее изменять при появлении новых требований к обрабатываемым данным. Точнее, заранее надо тщательно планировать, как возможные изменения во внешних данных можно будет "протянуть" через внутренние структуры, используемые рекурсивными функциями. Особенно при наступлении аварийных случаев где-то внутри рекурсивных вызовов.

Ответ 2



Рекурсивное программирование — это программирование с использованием рекурсий. Рекурсия (в программировании) — это использование функций (методов), которые для выполнения заданной задачи ссылаются на самих себя. Пример. Нужно раздробить глыбу льда для прохладительных напитков на куски не более 1,5 см. Решение с помощью рекурсии: $желательный_размер_льда = 1.5см; @итоговые_куски_льда = (); функция дробить_лёд ($кусок_льда) { если ($кусок_льда <= $желательный_размер_льда) то { поместить $кусок_льда в @итоговые_куски_льда; выходим; } @куски_льда = выполнить_колотый_удар(кусок_льда); для каждого ($кусок из @куски_льда) { если ($кусок > $желательный_размер_льда) то { дробить_лёд($кусок); } иначе { поместить $кусок_льда в @итоговые_куски_льда; } } } Т.е. сначала мы применяем действие дробить_лёд к целой глыбе, потом к кускам поменьше, потом к их собственным кускам и так до тех пор, пока не получим куски размером не более 1,5 см. Эта проверка (в данном случае на размер куска) является выходом из рекурсии и является обязательной, в противном случае функция будет вызывать себя "бесконечно".

Комментариев нет:

Отправить комментарий