Рекурсия

Одной из концепций программирования, которая сбила меня с толку при первом знакомстве, была рекурсия. Потребовалось некоторое время и множество гуглов (щелчок, чтобы убедиться, что мое написание было правильным… лол), прежде чем я наконец смог понять концепцию рекурсии.

Это похоже на то, что вы находитесь в кинозале с друзьями, и кто-то позади вас стучит и спрашивает, в каком ряду вы сидите. человек перед вами сделал то же самое, пока, наконец, не добрался до человека в первом ряду — и он ответил: «Я в первом ряду!», в этот момент добавляется один из первого ряда вверх, пока не дойдет до ты. Теперь вы можете сказать человеку позади вас, в каком ряду вы сидите. Отличная аналогия!

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

Пример рекурсии — написание мощной функции.

Мы можем решить реализовать функцию Math.pow() в JavaScript, используя рекурсию. Степенная функция принимает два аргумента: базу и экспоненту; Так что База умножается, показатель степени число раз.

Example: 2³ = 2 * 2 * 2 = 8

Реализация

function power(base, exponent){
if(exponent === 0){
   return 1;
}
return base * power(base, exponent — 1);
}

Пояснение

Рекурсивной функции нужен базовый случай (завершающий оператор — отличный от «базового» заполнителя, используемого в функции выше), иначе она будет работать бесконечно.

Итак, наш базовый оператор будет if(exponent === 0) return 1; Потому что любое число, возведенное в нулевую степень, всегда возвращает единицу. Итак, наша рекурсия имеет смысл возвращать 1, когда показатель степени достигает нуля.

Теперь к основному утверждению:

base * power(base,  exponent - 1);
1st cycle  = 2 * power(2, 3 - 1); // returns 2 * power(2, 2);
2nd cycle = 2 * power(2, 2- 1); // return 2 * power(2, 1);
3rd cycle = 2 * power(2, 1- 1); // return 2 * power(2, 0);

Помните наш базовый случай, когда показатель степени равен нулю? Как и в приведенной выше аналогии, когда человеку в первом ряду задали вопрос «На каком ряду ты сидишь?» и они ответили: «В первом ряду».

Здесь то же самое;

2 * power(2, 0); //power(2, 0) return 1, 
so will evaluate to 2 * 1 = returns 2
2 * power(2, 1); // will evaluate to                                               2 * 2 = returns  4
2 * power(2, 2); // will evaluate to                                               2 * 4 = returns 8
Finally return 8;

Итерация

В JavaScript существует множество способов итерации (цикла) по элементу. Мы можем решить использовать цикл for, цикл while, цикл do while, цикл for in и т.д.

Самое важное, что нужно учитывать при итерации, это то, что должна быть инициализация, условие для соответствия и какое-то увеличение/уменьшение.

Пример:

Скажем, у нас есть список имен в нашем массиве друзей, и нам нужно получить эти имена по отдельности и вывести их, это пример использования цикла.

var myFriends = new Array(“Emeka”, “Chioma”, “Bola”, “Casandra”);

Реализация

var myFriends = new Array(“Emeka”, “Chioma”, “Bola”, “Casandra”);
for(var i = 0; i < myFriends.length; i++){
console.log(myFriends[i]);
}

Результаты:

1st Iteration = “Emeka”
2nd Iteration = “Chioma”
3rd Iteration = “Bola”
4th Iteration = “Casandra”

Пояснение:

var i = 0;// This is an initialization. Stating that we want a counter variable i and we want it to start at zero.
i < myFriends.length; // This is a condition we are checking against. We say we want out loop to run as long as i is less than the length of our friends array.
i++; //This is the increment in this case. After our condition has been met and the code it run, add 1 to i to move to the next iteration.

В чем тогда разница между рекурсией и итерацией?

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

  1. Важный вывод заключается в том, что рекурсия — это оператор в функции, который вызывает саму функцию, а итерация позволяет повторно выполнять набор инструкций. >
  2. Рекурсивная функция завершается только тогда, когда указан базовый случай, а итерация завершается, когда условие цикла оценивается как ложное.
  3. Стек функций используется для хранения новых локальных переменных и параметров после каждого вызова, но в итерации стек не используется.
  4. Когда дело доходит до скорости выполнения, рекурсия выполняется медленно, а итерация выполняется быстро.
  5. В качестве побочного преимущества рекурсия сокращает количество строк кода, которые необходимо написать для получения результата. Но с итерацией вы, как правило, пишете больше кода.

Надеюсь, было весело и легко усваивается. Оставайся благословенным.