Не знаком с проблемами Эйлера, но ужас, кажется, заключается в том, что вы постоянно распределяете и перераспределяете то, что по сути являются одноразовыми промежуточными спиралями, когда вы рекурсивно вызываете базовый случай.
Перестройтесь так, чтобы вы распределили всю свою спираль впереди. Затем вызовите рекурсивную функцию, передав полную спираль в качестве параметра по ссылке вместе с параметром «level», который будет меняться при каждом рекурсивном вызове. Например, начальный звонок со спиралью 100x100 и уровнем 100; следующий (рекурсивный) вызов с той же спиралью, по ссылке и на уровне 98. Все операции внутри функции будут выполняться по единственной, выделенной спирали.
В двух словах: выделите структуру данных один раз, даже если вы рекурсивно оперируете этой структурой данных.