Статия Бележки относно рекурсията

Програмистите влагат следното значение в тази концепция: рекурсията е техника на програмиране, при която една програма се извиква директно или индиректно.

Обикновено начинаещ програмист, който за първи път е чул за рекурсия, се обърква малко. Изглежда, че няма нищо по-безсмислено от рекурсията. Такава верига от разговори никога няма да завърши поради безкраен цикъл или, в най-добрия случай, ще го направи, но необичайно, когато задачата свърши от всички налични компютърни ресурси.

Всъщност рекурсията е фин и грациозен инструмент, който, ако се използва умело, може да свърши добра работа за програмиста.

Всъщност защо рекурсията е привилегията да бъдеш почитан в отделна статия? Не е ли това често срещана техника на програмиране, една от многото?

Лично аз различавам рекурсията от общия набор по много причини. Ето някои от тях:

  • На първо място, рекурсията е красива. Първоначалното запознаване с него може да предизвика неразбиране и лек шок, но след като овладеете този механизъм, трудно можете да избегнете изкушението да го използвате от време на време в бъдеще. Елегантността на рекурсията в програмирането Мога да сравня само с елегантността на индукционния метод в математиката.
  • Много структури, както изкуствени, така и естествени, имат рекурсивен характер. Помислете за клоните и корените на дърветата, структурата на сложна организация, йерархията на класовете в сложна програма, фракталите - във всяка от тези структури ще намерите многобройни повторения на цялото в част. По този начин много обекти могат естествено да бъдат моделирани с рекурсивни структури. И какво друго да обработва рекурсивна структура, ако не рекурсивна процедура?
  • Много задачи имат и рекурсивен характер. Дори, може би, повечето нетривиални задачи. Поне при програмирането методът за разлагане на даден проблем на няколко по-прости далеч не е нов; те от своя страна се делят на още по-прости и така докато стигнем до елементарните части, които са доста лесни за решаване. Естествено, програмистите не са монополисти в тази област: архитекти, машинни инженери, математици използват подобни методи.

Въпреки всички тези предимства, рекурсията по никакъв начин не бърза да се регистрира в арсенала от инструменти на много програмисти, дори професионални (под професионализъм в момента в никакъв случай не разбирам степен на умение, а фактът, че е програмиране което дава на даден човек препитание), които имат най-много за нея неясна представа.

Всяко невежество обикновено поражда много предразсъдъци. Например, шаман от племето канибали, без да има представа за атмосферното електричество, обяснява на благодарни съплеменници, че гръмотевична буря е проява на немилостта на боговете. И думите му се приемат на първо място за истината, тъй като природата не търпи празнота - там, където няма знание, суеверието се урежда.

Рекурсията също е обрасла с слухове и суеверия. Можете да чуете от компютърни шамани, че тя:

  • е изключително разточителна памет (смешно, но чух тези аргументи преди много години, програмиране на мини-компютър PDP-11/40, който „щедро“ отдели около 50KB за потребителска задача; от време на време те се опитват да ме сплашат с това дори сега, когато количеството RAM 1 GB не е нещо необичайно);
  • много скъпо по отношение на ресурсите на процесора; в същото време фактът, че производителността на микропроцесорите на Intel през последните 10 години се е увеличила поне 100 пъти (съдейки само по тактовата честота, без да се отчита напредъкът на архитектурата), по някакъв начин е напълно пренебрегнат;
  • накрая е трудно да се внедри и отстрани грешка, което води до много грешки в програмата; фактът, че грешките при задаване на условия за цикли с предварителни и последващи условия, както и начални и крайни стойности в цикли с итерация над стойности, обикновено изобилстват в типична нерекурсивна програма, е смутен.