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 < 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 < 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>