Иногда в интервью я могу использовать рекурсию для решения проблемы (например, добавление 1
к целому числу с бесконечной точностью), или когда проблема представляется пригодной для использования рекурсии. Иногда это может быть связано с использованием рекурсии для решения проблем, поэтому, не задумываясь, рекурсия используется для решения проблемы.
Однако каковы соображения, прежде чем вы решите, что для решения проблемы целесообразно использовать рекурсию?
Некоторые мысли у меня были:
Если мы используем рекурсию для данных, которые каждый раз делятся пополам, кажется, что это не проблема при использовании рекурсии, поскольку все данные, которые могут поместиться в 16 ГБ ОЗУ или даже на жесткий диск 8 ТБ, могут обрабатываться рекурсией всего на 42 уровня. (поэтому переполнение стека не возникает (я думаю, что в некоторых средах глубина стека может составлять 4000, то есть больше 42, но в то же время это также зависит от того, сколько локальных переменных у вас, так как каждый стек вызовов занимает больше памяти) если существует много локальных переменных, и размер памяти, а не уровень, определяет переполнение стека)).
Если вы вычисляете числа Фибоначчи с использованием чистой рекурсии, вам действительно придется беспокоиться о сложности времени, если вы не кешируете промежуточные результаты.
А как насчет добавления 1
к целому числу с бесконечной точностью? Может быть , это спорно, так как, вы работать с числами , которые имеют длину 3000 цифр или длиной 4000 цифр, настолько большой , что может вызвать переполнение стека? Я не думал об этом, но, возможно, ответ - нет, мы не должны использовать рекурсию, а просто использовать простой цикл, потому что, если в каком-то приложении число действительно должно быть длиной 4000 цифр, чтобы проверить некоторые свойства числа, такие как, является ли число простым или нет.
Главный вопрос: каковы соображения, прежде чем вы решите использовать рекурсию для решения проблемы?
1
к бесконечной точности целого числа? Можно сказать, да, они сводятся к меньшим проблемам, но чистая рекурсия для этого не подходит