Незважаючи на те, що середовище виконання підтримує TCO зі спеціальною інструкцією IL, хвостові рекурсивні виклики функцій ніколи не оптимізуються та не запитуються компілятором C#. Так загалом 2, якщо ви рекурсуєте занадто глибоко, очікуйте сумнозвісного винятку StackOverflow. Це на відміну від F#, де будь-які кінцеві виклики завжди усуваються.12 жовтня 2022 р.
C# забезпечує власну підтримку рекурсії, що робить доступним і можливим реалізацію рекурсивних функцій.
Однак важливо зазначити, що не всі мови програмування підтримують TCO. На жаль, Python разом із багатьма іншими популярними мовами, такими як Java, C# і Ruby, не забезпечує вбудованої підтримки TCO.
Оскільки багато компіляторів Scheme використовують C як проміжний цільовий код, хвостова рекурсія повинна бути закодована в C без збільшення стека, навіть якщо компілятор C не оптимізує кінцеві виклики. Багато реалізацій досягають цього за допомогою пристрою, відомого як батут, фрагмент коду, який неодноразово викликає функції.
Рекурсія не завжди погана, якщо ви знаєте, коли і як її використовувати. Іноді є кращі альтернативи, яких ви могли б втратити. Основне занепокоєння щодо використання рекурсії полягає в тому, що вона занадто дорога з точки зору споживання пам’яті.
Незважаючи на те, що середовище виконання підтримує TCO зі спеціальною інструкцією IL, хвостові рекурсивні виклики функцій ніколи не оптимізуються та не запитуються компілятором C#. Отже, загалом 2, якщо ви рекурсуєте занадто глибоко, очікуйте горезвісного винятку StackOverflow. Це на відміну від F#, де будь-які кінцеві виклики завжди усуваються.
Рекурсія не завжди є найкращим варіантом для алгоритму, і іноді вона може створювати більше проблем, ніж вирішувати. Ви можете уникнути рекурсії якщо проблема не має чіткого базового або рекурсивного випадку, або якщо рекурсивний випадок не зменшує суттєво розмір проблеми.