В C # рекомендуется ли использовать рекурсивные функции в алгоритмах? [closed]

Это должно сработать, хотя может потребоваться, чтобы родительский элемент elem был относительно позиционирован ...

var elem = $("#elementToShowCalenderUnder");
var pos = elem.position();
$("#yourCalender").css({
  position: "absolute",
  left: pos.left() + "px";
  top: pos.top() + elem.height() + 5 + "px";
}).insertAfter(elem);
17
задан Björn Pollex 21 October 2010 в 09:47
поделиться

4 ответа

Если вы не используете рекурсию, вы все равно будете переписывать свой алгоритм, используя свой собственный «стек», который в конечном итоге будет подвергаться аналогичным условиям во время выполнения.

Вы можете настроить размер стека в соответствии с потребностями вашего алгоритма, но если вы посмотрите на WPF / Silverlight и обычные алгоритмы, связанные с пользовательским интерфейсом, все они рекурсивны по своей природе, и каждый щелчок, каждое нажатие клавиши и каждое уведомление проходят через множество рекурсивных методы.

Ознакомьтесь с Создание потока с нестандартным размером стека ,

Хотя скорость может варьироваться в зависимости от алгоритма и сложности, но создание отдельного нерекурсивного алгоритма усложнит задачу, как вы будете выполняйте все операции с хранилищами данных самостоятельно, используя списки, стеки и т. д.

Это довольно сложный вопрос по сравнению с производительностью, если вы хотите повысить производительность, то ваш нерекурсивный алгоритм будет выполняться быстрее, но для разработки и реализации такого алгоритма потребуется больше времени. Где еще, если вам нужно более быстрое решение, вы можете написать рекурсивный алгоритм, который будет медленнее в исполнении, но если разница составляет всего несколько миллисекунд или микросекунд, то делать это не стоит.

15
ответ дан 30 November 2019 в 12:43
поделиться

Цикл всегда превосходит рекурсию, поскольку у стека всегда больше издержек, чем у вас. Многие операции с потоками сильно бьют по стеку, так что вы получаете дальнейшее снижение.

Тем не менее, удобочитаемость является большим плюсом, поэтому я лично буду использовать рекурсию, если мне не понадобится каждая капля производительности, например в операциях обработки изображений, или я не ожидаю, что мои стеки вырастут очень большими - хотя переполнение стека почти исключительно из-за ошибок.

6
ответ дан 30 November 2019 в 12:43
поделиться

Когда вам нужна рекурсия, она вам нужна, например, для прогулки по дереву в глубину или для анализа рекурсивного спуска.

Если у вас есть выбор, например, использовать рекурсию вместо цикла, то, возможно, это зависит от того, на каком языке вы находитесь. Будьте проще.

1
ответ дан 30 November 2019 в 12:43
поделиться

В текущей реализации Microsoft компилятора C # оптимизация хвостовых вызовов не производится. Это создает функциональные алгоритмы, которые сильно переполняют стек. Хотя я не рекомендовал бы использовать глубоко рекурсивные алгоритмы в C #, методы, которые не повторяются глубоко, не должны вызывать у вас никаких проблем.

5
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: