Локальные переменные, как вы, возможно, знаете, хранятся в стеке.
Когда функция возвращается, локальные переменные из каждого вызова остаются в стеке до тех пор, пока выполняются их соответствующие функции.Если вы наберете слишком много ресурсов, сборка будет слишком большой, и вы, скорее всего, получите исключение переполнения стека, например, когда вы получаете, или ошибку сегментации, когда стек переполняется в защищенную память.
Это принципиально, и нет другого пути, кроме как увеличить объем доступной памяти или переписать вашу функцию, чтобы она стала итеративной.