– Но послушайте, если это так, то возникает серьёзнейший вопрос. Потому что если мы не имеем над мозгом власти, и мозг за нас всё решает, то тогда я могу сказать: «Послушайте, я же не в ответе за свои поступки. Это Он всё решает! Хорошо я делаю? – Ну, Он молодец… Плохо я делаю? – Он виноват! А я то тут не при чём, меня нельзя за это винить!»
Антон остановил видео. В комнате наступила пауза. Все молча смотрели, словно в пустоту, ошарашенные услышанным. Затем Ирина прошептала, и слова её в тишине прозвучали чётко и ясно:
– Так наша жизнь – это кино?..
– Мда… Похоже, не просто кино, а целая рекурсия… – задумчиво молвил в ответ Александр.
Услышав незнакомое словцо, все молча переглянулись.
– Саша, а что такое рекурсия? – спросила Ирина.
Саша посмотрел на неё и улыбнулся. Пытаясь подобрать наглядный образ из жизни, который бы позволил ему доходчиво объяснить суть этого понятия, ненадолго задумался. Потом, снова улыбнувшись, начал так.
– Представь себе, что ты находишься у двери в некую комнату, и перед тобой стоит простенькая задачка: зайти внутрь, всю её обойти, потом снова выйти наружу и закрыть за собой дверь. В помощь тебе можно написать должностную инструкцию о том, как это правильно сделать. В процедурном программировании это будет означать: написать процедуру. Ну или функцию, или подпрограмму, не важно как назвать – в данном случае это всё будут синонимы. Важна суть.
Алгоритм процедуры может выглядеть, например, так. Если перед тобой находится дверь, следует нажать на ручку двери вниз, толкнуть её вперёд и открыть. Затем зайти в комнату и, придерживаясь, например, всё время левой стороны, постоянно идти вдоль стены, до тех пор, пока не обойдёшь всю комнату и не окажешься снова возле двери, через которую зашёл, затем выйти из неё, закрыть за собой дверь и отпустить ручку. Чем больше будет таких подробностей в инструкции, тем меньше придётся задумываться исполнителю и легче будет выполнить задачку. И заметь, не важно, какая это будет комната – большая или маленькая, длинная и узкая или, наоборот, короткая и широкая, она может быть даже круглой или буквой «Г», всё равно данный алгоритм позволит её выполнить.
А теперь представь, что в этой комнате тоже может оказаться дверь, ведущая в другую комнату, и может быть даже и не одна, а много дверей и много комнат за ними, а в тех комнатах тоже могут оказаться двери, что превращает всё это в некий лабиринт. И твоя задача усложняется – тебе нужно обойти не одну, а все комнаты, при этом ни одной не пропустив! Так вот, оказывается, что если придерживаться написанной инструкции и правила – обнаружил дверь, обязательно в неё зайди, то и эта задача легко выполняется. И организационно тут на самом деле лишь два варианта.
Первый – это перед каждой дверью, прежде чем в неё войти, нужно будет получать свой отдельный лист бумаги с напечатанной на нём инструкцией. И давай это запомним, потому что в первом варианте это самое важное: для каждой двери – своя инструкция.
Со стороны это будет выглядеть так. Получив бумажку, ты держишь её в руках и последовательно выполняешь всё, что там написано, ставя для себя галочки напротив каждого выполненного пункта, чтобы не запутаться. И вот, уже идя по комнате вдоль стенки, ты вдруг обнаруживаешь ещё одну дверь. Сразу вспоминаем: первый вариант нам предписывает, что новая дверь требует взять в руки и новую инструкцию. А это значит, что выполнение текущей инструкции следует отложить до той поры, пока ты сюда из этой же двери снова не вернёшься назад. Но прежде чем взять в руки новую бумажку, старую ты кладёшь в карман. В общем, процедура не сложная, и так будет повторяться до тех пор, пока ты не обойдёшь все комнаты, но если комнат окажется много, и глубина их заложения будет большая, то вполне возможно, что в какой-то момент карман у тебя оттопырится и будет просто набит прерванными инструкциями. Однако при этом обрати внимание – они будут все совершенно одинаковые!
Поэтому есть второй вариант – вставить в инструкцию ещё один пункт, в котором будет написано: обнаружив дверь, запомни эту строчку (к ней ты вернёшься, когда выйдешь из двери обратно), и переходи в начало инструкции! На языке программиста, функция, позволяющая вызывать саму себя, называется рекурсивной. А каждый такой вызов называется рекурсией.
При этом надо понимать, что находиться во всех комнатах одновременно ты не можешь. А теперь представь, что обход любой из этих комнат, это и есть жизнь. И если ты уже зашла из одной комнаты в другую, то твоя предыдущая жизнь останавливается, и время в ней не движется до тех пор, пока ты в неё снова не вернёшься. Но для этого нужно полностью прожить жизнь в той комнате, в которую ты вошла.
– Мда,.. и впрямь рекурсия… Пришли в кино, чтобы увидеть фильм про то, как мы смотрим кино… – произнёс Юра.
– Да, вот только в просмотренном фильме отсутствует квантовая механика, – вставил замечание Антон.