![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Например, получение списка всех файлов песочницы удобно реализовывать именно через рекурсию.
захотелось сравнить быстродействие рекурсии и итерации.
Оказалось, что рекурсия побыстрее работает более чем в два раза...
Наверное из-за того что стек работает быстрее...
Удивительное рядом. Ожидал обратный эффект. ))
Оказалось, что рекурсия побыстрее работает более чем в два раза...
По-моему, такой результат полного цикла - баг оптимизации.
Надо звать @Ilyas для анализа.
По-моему, такой результат полного цикла - баг оптимизации.
Надо звать @Ilyas для анализа.
возможно.
1.7 наносекунды на одну итерацию (сумма с элементом массива+приращение индекса+проверка индекса) - как-то многовато.
По-моему, такой результат полного цикла - баг оптимизации.
Надо звать @Ilyas для анализа.
Да, тут есть над чем поработать
Представленная рекурсия вырождается в цикл, который очень похож на сравниваемый, только оптимизируется он лучше.
Буду разбираться в возникшей разнице.
Для скорости (более лучших оптимизаций компилятором) работы программы в циклах, старайтесь избегать использования (адресации к) глобальных переменных и членов объектов.
Попробуйте в приведённом примере использовать локальную sum1 вместо глобальной
Для скорости (более лучших оптимизаций компилятором) работы программы в циклах, старайтесь избегать использования (адресации к) глобальных переменных и членов объектов.
Представленная рекурсия вырождается в цикл, который очень похож на сравниваемый, только оптимизируется он лучше.
Попробуйте в приведённом примере использовать локальную sum1 вместо глобальной
цикл стал работать чуть быстрее, но все равно рекурсия в выигрыше.
Не понятно только, почему при локальных переменных рекурсия стала работать медленнее. (Хотя может быть и нет).
Я правильно понял, что линковщик из рекурсии формирует цикл и в такой форме рекурсивной функции переполнения стека можно не бояться?
Не закладывайтесь на это, мы можем пересмотреть оценку для подобной оптимизации рекурсивной функций
А так да, при удалении рекурсии, тело функции превращается в цикл, вместо рекурсивного вызова, соответственно, стек не может быть переполнен
Николай, как выполнить ползунок, т.е. просто код, без библиотек?