Аннотация:
Решение задач с данными, представленными вложенными или, по-другому, гнездовыми массивами, является непростым делом из-за достаточно непредсказуемой их структуры. И здесь во многих случаях спасительной оказывается рекурсия. Ее использование позволяет линейно по одной и той же схеме осуществлять пробежку по всем элементам каждого уровня любого гнездового массива вне зависимости от его структуры и глубины вложенности. Гнездовой массив можно интерпретировать деревом, корнем которого является сам массив, от него идут дуги к массивам-элементам и т. д. Листьями подобного дерева являются скаляры или строки — конечные элементы, не имеющие ссылок на последующие массивы.
В статье для решения ряда задач общего характера с гнездовыми массивами предлагаются соответствующие рекурсивные программы-функции. Вот примеры таких задач: подсчитать общее количество листьев массива; сформировать массив из транспонированных на всех уровнях вложенности элементов исходного массива; выяснить, является ли данный объект (скаляр, строка, простой массив, гнездовой массив) элементом данного массива на каком-либо уровне вложенности; подсчитать количество вхождений объекта в массив на всех уровнях вложенности; собрать все листья массива в вектор, заместить листья данного массива элементами какого-либо вектора и т. п.
Во всех случаях рекурсивная триада такова: параметр рекурсии — гнездовой массив; декомпозиция — переходы на всех уровнях вложенности от массивов к их элементам и так до листьев; рекурсивная база, то есть тривиальные случаи в рекурсии — листья массивов [1].
Предлагаемые лаконичные рекурсивные программы-функции решения перечисленных и некоторых других задач реализованы на простом и интуитивно понятном языке программирования системы инженерных и научных вычислений PTC Mathcad Prime (версия 3.1) [2,3].
Отметим, что в этой системе гнездовые массивы — это вложенные друг в друга матрицы.
Библиография: 3 названия.