Рекурсия
Одной из концепций программирования, которая сбила меня с толку при первом знакомстве, была рекурсия. Потребовалось некоторое время и множество гуглов (щелчок, чтобы убедиться, что мое написание было правильным… лол), прежде чем я наконец смог понять концепцию рекурсии.
Это похоже на то, что вы находитесь в кинозале с друзьями, и кто-то позади вас стучит и спрашивает, в каком ряду вы сидите. человек перед вами сделал то же самое, пока, наконец, не добрался до человека в первом ряду — и он ответил: «Я в первом ряду!», в этот момент добавляется один из первого ряда вверх, пока не дойдет до ты. Теперь вы можете сказать человеку позади вас, в каком ряду вы сидите. Отличная аналогия!
Выражаясь более техническими терминами, рекурсия — это когда оператор в функции многократно вызывает сам себя.
Пример рекурсии — написание мощной функции.
Мы можем решить реализовать функцию 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.
В чем тогда разница между рекурсией и итерацией?
Кажется, что концепции рекурсии и итерации одинаковы, потому что они оба заставляют нас повторять какой-то вызов. Какая тогда разница?
- Важный вывод заключается в том, что рекурсия — это оператор в функции, который вызывает саму функцию, а итерация позволяет повторно выполнять набор инструкций. >
- Рекурсивная функция завершается только тогда, когда указан базовый случай, а итерация завершается, когда условие цикла оценивается как ложное.
- Стек функций используется для хранения новых локальных переменных и параметров после каждого вызова, но в итерации стек не используется.
- Когда дело доходит до скорости выполнения, рекурсия выполняется медленно, а итерация выполняется быстро.
- В качестве побочного преимущества рекурсия сокращает количество строк кода, которые необходимо написать для получения результата. Но с итерацией вы, как правило, пишете больше кода.
Надеюсь, было весело и легко усваивается. Оставайся благословенным.