Чтобы сказать, что НИЧЕГО НЕПРАВИЛЬНО с 500-кратной рекурсией, может быть неправильно само по себе.
Проблема с рекурсией заключается в том, что MATLAB должен настраивать отдельные рабочие области каждый раз, когда вызывается функция, создавая их стек. Это может быть довольно неэффективным, используя достаточное количество времени, а также память. Так что может быть что-то не так с тем, что вы делаете.
Также очень часто я видел, что рекурсивные функции могут быть переписаны как НЕ рекурсивные. Методы, такие как memoization, могут использоваться, чтобы избежать рекурсивной оценки функции на одних и тех же входах много раз. Почему одни и те же вычисления более одного раза?
Вы можете изменить ограничения на размер стека, но очень часто эти ограничения вполне разумны и помещаются там, чтобы предотвратить проблемы памяти и времени. Таким образом, вам гораздо лучше смотреть серьезно на свой код, чтобы решить, подходит ли такое изменение, а не переформулировать вашу проблему.
Например, вы можете вычислить факториалы, используя рекурсию, но зачем беспокоиться? Это очень глупое решение, когда простой цикл намного эффективнее. Накладные расходы намного больше, чем вы хотите потратить, когда цикл является достаточным для проблемы.
Другим примером является последовательность Фибоначчи. Его можно записать рекурсивно, что легко сделать, но это не делает его вообще хорошим делом. Вычисляемый полностью рекурсивно, n-й номер Фибоначчи потребует экспоненциального времени и памяти для вычисления F (n). Петли лучше, что позволяет выполнять O (n) объем работы. Еще лучше, что схемы memoization, связанные с правильными тождествами, позволяют вычислять F (n) в O (log2 (n)) времени.
Дело в том, что вы можете решить множество проблем с рекурсией, но это не значит, что это правильный способ сделать это.
могли бы Вы опубликовать код или имя функции, которая рекурсивно в 500 раз? –