การเรียกซ้ำ - ตามที่เราทุกคนรู้ - เป็นหนึ่งในปัญหาเหล่านั้น - ที่ห่อหัวของคุณไปรอบ ๆ รู้สึกเหมือนได้รับ "เหตุการณ์สำคัญ" ในการเดินทางการเขียนโปรแกรมของคุณ
แต่เมื่อพูดถึงการใช้งานจริงในปัญหาในโลกแห่งความจริง - การรู้กลไกของการเรียกซ้ำไม่เพียงพอ - เราต้องเข้าใจธรรมชาติของปัญหาที่การเรียกซ้ำเป็นวิธีที่เหมาะสมที่สุด
ดังนั้นคำถามของฉันคือสิ่งนี้ ...
- อะไรคือ "รูปแบบปัญหา" ที่เรียกร้องให้แก้ปัญหาการเรียกซ้ำ
- เรียกใช้ซ้ำในรูปแบบของกลยุทธ์ "แบ่ง & พิชิต" หรือรูปแบบของ "การใช้รหัสซ้ำ" - หรือเป็นรูปแบบการออกแบบในสิทธิ์ของตนเอง
- คุณช่วยยกตัวอย่างปัญหาโลกแห่งความจริงให้เราทราบได้เมื่อการเรียกซ้ำเป็นวิธีแก้ปัญหาทันที
- อัปเดต -
คำตอบมากมายอ้างถึง "ปัญหาที่แท้จริง" ในฐานะการสำรวจต้นไม้, แฟคทอเรียล ฯลฯ ฉันต้องการ "ปัญหาที่แท้จริง" - ให้ฉันยกตัวอย่างให้คุณ ...
เรามีข้อความขนาดใหญ่ (ข้อความประมาณ 30 MB เป็นรายการที่เชื่อมโยงstructs
) และเราจำเป็นต้องสร้างดัชนีสำหรับการค้นหาข้อความแบบเต็ม เราต้องการเก็บดัชนีทั้งหมดในหน่วยความจำและจัดทำดัชนีข้อความใหม่ทุกๆ 10 นาที
ทุก ๆ 10 นาทีเราจะเปรียบเทียบข้อความทั้งหมด (รายการที่เชื่อมโยงสองรายการ, บรรทัดต่อบรรทัด) กับกลุ่มข้อความที่สร้างขึ้นใหม่ - เพื่อดูว่าบรรทัดใดที่มีการเปลี่ยนแปลง - จากนั้นเราจะจัดทำดัชนีเฉพาะบรรทัดนั้นอีกครั้ง เราสามารถหลีกเลี่ยงการทำดัชนีข้อความทั้งหมดอีกครั้ง ข้อควรจำ - เราต้องค้นหาจุดต่างระหว่างสองรายการที่เชื่อมโยง 30 MB
หนึ่งในเพื่อนร่วมงานของฉันเกิดขึ้นกับโปรแกรมที่ยอดเยี่ยมซึ่งใช้การเรียกซ้ำแบบเฮฟวี่เพื่อเปรียบเทียบบรรทัด - แล้วรวบรวมตำแหน่งที่ chucks แตกต่างกันในอาร์เรย์ - ใช่ฉันรู้ว่ามันฟังดูงงงวย - การเรียกซ้ำช่วยได้อย่างไร - มันทำ.
ประเด็นคือ - เขาจะเห็นได้อย่างไรว่าปัญหานี้สามารถแก้ไขได้อย่างชาญฉลาดด้วยการใช้การเรียกซ้ำอย่างหนัก