Я виходжу з фізики, і, таким чином, багато математики. Мені здається, що легко помітити проблеми, які добре підходять для рекурсивних / динамічних рішень програмування, знаходячи схожість із доказами за допомогою індукції .
У доказ індукції ви маєте дві частини:
- ви доказуєте, що якщо щось істинне для ітерації N, то це також ітерація N + 1
- ти доводиш, що це правда для ітерації 1
У рекурсивному / динамічному програмуванні:
- Ви визначаєте умову виходу (наприклад, ви жорстко передаєте рішення для ітерації 1)
- ви обчислюєте рішення для ітерації N з урахуванням рішення для ітерації N-1
Отже, як відповіли інші, це питання досвіду та підбору натяків, але ви можете повторно використовувати інші навички, щоб направляти вас. Після цього у вас завжди повинні бути дві частини, про які я згадував: якщо ви цього не зробите, то це не спрацює.
Наприклад, для створення всіх перестановок набору:
- умова виходу: якщо у вас є лише один елемент, поверніть його
- рекурсія: перестановки набору з N елементів - це N наборів перестановок, які ви отримуєте, обираючи кожен елемент і комбінуючи з усіма N-1 наборами (безлічі) перестановок отриманого підмножини, видаляючи елемент.