Іноді в інтерв'ю я можу використовувати рекурсію для вирішення проблеми (наприклад, додавання 1
до нескінченного цілого числа) або коли проблема виявляється придатною для використання рекурсії. Іноді це може бути просто завдяки використанню рекурсії для вирішення проблеми, тому, не задумуючись, для вирішення проблеми використовується рекурсія.
Однак які міркування перш ніж ви зможете вирішити, чи підходить використовувати рекурсію для вирішення проблеми?
Деякі думки у мене були:
Якщо ми використовуємо рекурсію на даних, які щоразу зменшуються вдвічі, здається, що це не проблема з використанням рекурсії, оскільки всі дані, які можуть вміститися в 16 ГБ оперативної пам’яті, або навіть на 8 ТБ жорсткий диск, можуть оброблятися рекурсією просто на 42 рівні глибиною. (так що жодного переповнення стека (я думаю, в деяких умовах стек може бути глибоким на рівні 4000, набагато більше 42, але в той же час це також залежить від того, скільки локальних змінних у вас, як кожен стек викликів, займають більше пам'яті) якщо є багато локальних змінних, і переповнення стека визначає саме розмір пам'яті, а не рівень.
Якщо ви обчислюєте числа Фібоначчі за допомогою чистої рекурсії, вам дійсно доведеться турбуватися про складність часу, якщо ви не кешуєте проміжні результати.
А як щодо додавання 1
до нескінченного цілого числа? Можливо, це дискусійно, адже, чи будете ви працювати з числами, що мають 3000 цифр або 4000 цифр завдовжки, настільки великі, що це може спричинити переповнення стека? Я не думав про це, але, можливо, відповідь «ні», ми не повинні використовувати рекурсію, а просто використовувати просту петлю, бо що робити, якщо в якомусь додатку кількість дійсно повинна бути 4000 цифр, щоб перевірити, чи є властивості числа, наприклад, чи є простим число чи ні.
Остаточне запитання: які міркування, перш ніж ви зможете вирішити використовувати рекурсію для вирішення проблеми?
1
до нескінченного цілого числа? Ви можете сказати, так, вони зводяться до менших проблем, але чиста рекурсія для цього не підходить