ฉันมาจากภูมิหลังทางฟิสิกส์และคณิตศาสตร์จำนวนมาก ผมพบว่าง่ายต่อการมองเห็นปัญหาที่ดีเหมาะแก่การแก้ปัญหาการเขียนโปรแกรม recursive / แบบไดนามิกโดยการค้นหาความคล้ายคลึงกันกับหลักฐานโดยการเหนี่ยวนำ
ในการพิสูจน์โดยอุปนัยคุณมีสองส่วน
- คุณพิสูจน์ว่าหากสิ่งที่เป็นจริงสำหรับการทำซ้ำ N มันก็เป็นความจริงสำหรับการทำซ้ำ N + 1
- คุณพิสูจน์ว่ามันเป็นความจริงสำหรับการวนซ้ำ 1
ในการโปรแกรมแบบเรียกซ้ำ / การเขียนโปรแกรมแบบไดนามิก:
- คุณระบุเงื่อนไขการออก (ตัวอย่างเช่นคุณใช้วิธีแก้ปัญหาสำหรับการวนซ้ำ 1)
- คุณคำนวณวิธีแก้ปัญหาสำหรับการทำซ้ำ N กำหนดวิธีแก้ปัญหาสำหรับการทำซ้ำ N-1
ดังนั้นตามที่คนอื่น ๆ ตอบมันเป็นเรื่องของประสบการณ์และการเลือกคำแนะนำ แต่คุณสามารถใช้ทักษะอื่น ๆ เพื่อเป็นแนวทางให้คุณได้ หลังจากนั้นคุณต้องมีสองส่วนที่ฉันพูดถึงเสมอ: ถ้าคุณทำไม่ได้มันจะไม่ทำงาน
ตัวอย่างเช่นในการสร้างพีชคณิตทั้งหมดของชุด:
- เงื่อนไขทางออก: หากคุณมีองค์ประกอบเดียวให้ส่งคืน
- การเรียกซ้ำ: การเรียงสับเปลี่ยนของชุดรายการ N คือชุดเรียงสับเปลี่ยน N ชุดที่คุณได้รับโดยการเลือกแต่ละองค์ประกอบและรวมกับการเรียงสับเปลี่ยนของชุดย่อย N-1 ทั้งหมดที่คุณได้รับโดยการเอาองค์ประกอบออก