HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Сегодня попытаюсь немного описать рекурсию с учетом своего скромного студенческого опыта, как вижу ее сам. На мой взгляд, это достаточно сложная тема (особенно для новичков), и грамотно написать работающую рекурсивную функцию - задача не из простых. С рекурсий можно познакомиться здесь, в этом уроке:<a>Рекурсия</a>. Тут рекурсия рассматривается на примере вычисления факториала (рекурсивный процесс), а углубиться в тему можно в этом уроке:<a>Итеративный процесс</a>.</p>
1 <p>Сегодня попытаюсь немного описать рекурсию с учетом своего скромного студенческого опыта, как вижу ее сам. На мой взгляд, это достаточно сложная тема (особенно для новичков), и грамотно написать работающую рекурсивную функцию - задача не из простых. С рекурсий можно познакомиться здесь, в этом уроке:<a>Рекурсия</a>. Тут рекурсия рассматривается на примере вычисления факториала (рекурсивный процесс), а углубиться в тему можно в этом уроке:<a>Итеративный процесс</a>.</p>
2 <p>Хотелось бы добавить к этой теме немного от себя. Допустим, вот пример самодельной экспериментальной рекурсивной функции, которая определяет - является ли число простым? Она принимает два параметра: проверяемое число (<em>number</em>) и делитель (<em>devider</em>), но сразу предупрежу, что делителем обязательно является число, которое на единицу меньше проверяемого (<em>devider === number - 1</em>):</p>
2 <p>Хотелось бы добавить к этой теме немного от себя. Допустим, вот пример самодельной экспериментальной рекурсивной функции, которая определяет - является ли число простым? Она принимает два параметра: проверяемое число (<em>number</em>) и делитель (<em>devider</em>), но сразу предупрежу, что делителем обязательно является число, которое на единицу меньше проверяемого (<em>devider === number - 1</em>):</p>
3 <p>Как вам, наверное, уже известно, для корректного завершения работы рекурсивной функции необходимо наличие базового случая. В вышеприведенной функции им является (<em>devider === 1</em>). Но хотелось бы обратить внимание на последнюю строку с return: мы видим там работу "движка" рекурсии, где функция вызывает саму себя и "топливом" для этой работы является уменьшение параметра<em>devider</em>(на единицу с каждым вызовом). Это чем-то похоже на работу классического цикла<em>for (let i = 0; i &lt; arr.length; i += 1) { ... }</em>, топливом для работы которого является изменение переменной<em>i</em>. При достижении базового случая - все, стоп-машина, топливо<em>devider</em>почти исчерпано (примерно такая вот аналогия). Дополнительно также можно рассмотреть алгоритм Евклида (с рекурсией) для вычисления наибольшего общего делителя для двух целых чисел:</p>
3 <p>Как вам, наверное, уже известно, для корректного завершения работы рекурсивной функции необходимо наличие базового случая. В вышеприведенной функции им является (<em>devider === 1</em>). Но хотелось бы обратить внимание на последнюю строку с return: мы видим там работу "движка" рекурсии, где функция вызывает саму себя и "топливом" для этой работы является уменьшение параметра<em>devider</em>(на единицу с каждым вызовом). Это чем-то похоже на работу классического цикла<em>for (let i = 0; i &lt; arr.length; i += 1) { ... }</em>, топливом для работы которого является изменение переменной<em>i</em>. При достижении базового случая - все, стоп-машина, топливо<em>devider</em>почти исчерпано (примерно такая вот аналогия). Дополнительно также можно рассмотреть алгоритм Евклида (с рекурсией) для вычисления наибольшего общего делителя для двух целых чисел:</p>
4 <p>Признаться честно, ее логика и сейчас сложна лично для моего понимания. Чтобы так ловко сконструировать, необходимы глубокие познания в JavaScript, но даже и так заметно, что в выражении (соответствующем<em>false</em>) работает "движок" рекурсии, который остановится при вычислении наибольшего общего делителя (базовый случай) в выражении тернарного оператора, соответствующего<em>true</em>.</p>
4 <p>Признаться честно, ее логика и сейчас сложна лично для моего понимания. Чтобы так ловко сконструировать, необходимы глубокие познания в JavaScript, но даже и так заметно, что в выражении (соответствующем<em>false</em>) работает "движок" рекурсии, который остановится при вычислении наибольшего общего делителя (базовый случай) в выражении тернарного оператора, соответствующего<em>true</em>.</p>
5 <p>В общем, примерно как-то так :)</p>
5 <p>В общем, примерно как-то так :)</p>