Правильно ли я понял рекурсию?

277
25 июня 2017, 17:08

Неделю боролся с осознанием рекурсии, изучаю учебник Learn.Javascript. Пока в голове такая каша:

  1. Рекурсия это вызов функции внутри себя же, но уже с другим параметром
  2. В решении конкретной задачи параметр должен уменьшаться или увеличиваться
  3. Параметр будет уменьшаться/увеличиваться до тех пор пока не запнётся на условии
  4. Условие на котором запнётся рекурсия должно вернуть простейшее решение уже не требующее очередного вызова функции
  5. Все предыдущие функции ждут решения следующей, в том числе простейшего решения. Место где они ждут называется Стек (с англ. Stack == стог, стопка)
  6. Когда рекурсия запнётся на простейшем решении, результаты начнут возвращаться в обратном порядке. Из конца в начало, с глубины на поверхность. Функции которые получили решение будут уходить из Стека начиная с последней. Останется только довольная первая, которая всю эту заварушку устроила.

Следует различать три вещи:

  1. Рекурсия это общее явление, оно встречается не только в программировании - в природе, рисовании и т.д....
  2. Чтобы использовать это явление для решения задач, оно должно возвращать нам результат. Нужно объяснить компьютеру с каким шагом двигаться, где остановиться и что возвращать.
  3. А вот Стек это уже чисто программное явление, т.к. это ячейки компьютерной памяти. На каждом шаге компьютер будет записывать всё что происходит чтобы не заблудиться именно в Стек.

Можно такой пример привести: В армии генерал отправил майора за спиртом, майор отправил капитана за спиртом, капитан отправил лейтенанта за спиртом, лейтенант отправил сержанта за спиртом, сержант отправил рядового за спиртом. Рядовому некого отправлять, это очевидно - он пошёл и нашёл спирт. Затем спирт пошёл обратно по цепочке рядовой - сержант - лейтенант - капитан - майор - генерал. Генерал доволен, всё чётко.

Друзья, сейчас очень нужна ваша критика - дополните или поправьте чтобы лучше понять рекурсию.

READ ALSO
jspm vs webpack что выбрать простому web-dev

jspm vs webpack что выбрать простому web-dev

Я занимаюсь разработкой веб-сайтов под laravel framework (в основном фронтэнд)И дело дошло до обновления инструментария

318
Как удалить из массива пустые значения

Как удалить из массива пустые значения

Есть массив в котором имеются пустые значения, например такой:

254
Как пропустить определенный индекс в for-loop Javascript

Как пропустить определенный индекс в for-loop Javascript

Как можно перепрыгнуть определенный индекс в цикле? Например, дан код

266
Не получается подключится к phpmyadmin

Не получается подключится к phpmyadmin

phpmyadmin лежит в директории с сайтом, стоит 2 апач и 7 пхп, на php56 таким образом работал, после установки php7

294