แนวคิดพื้นฐานของการออกแบบอัลกอริทึมแบบเรียกซ้ำคือ:
สำหรับปัญหาที่ซับซ้อนให้ย่อยสลายปัญหาดั้งเดิมเป็นปัญหาย่อยที่ค่อนข้างง่ายและดำเนินการต่อไปจนกว่าปัญหาย่อยจะง่ายมากจนสามารถแก้ไขได้โดยตรงนั่นคือเป็นการออกจากการเกิดซ้ำเพื่อให้สามารถแก้ไขปัญหาเดิมได้
เมื่อทำอัลกอริทึมแบบเรียกซ้ำคุณต้องเข้าใจทางออกนั่นคือคุณต้องมีเงื่อนไขสิ้นสุดที่เรียกซ้ำอีกครั้งเมื่อทำอัลกอริทึมแบบเรียกซ้ำ สิ่งนี้สำคัญมาก ในความเป็นจริงทางออกนี้ง่ายมากที่จะเข้าใจ มันเป็นเพียงเงื่อนไข เมื่อพบเงื่อนไขนี้เราจะไม่กลับมาอีกต่อไป
กุญแจสำคัญในการเข้าใจคือ:
(1) ทางออกแบบเรียกซ้ำ
(2) การผลักดันพื้นดินค่อยๆเข้าใกล้ทางออก
การเรียกซ้ำเป็นพฤติกรรมของวิธีการที่เรียกตัวเอง ระวังที่จะเขียนส่วนหัวการเรียกซ้ำนั่นคือเมื่อใดที่จะออกจากการเรียกซ้ำ
หลีกเลี่ยงวงจรอุบาทว์
ตัวอย่างที่ 1 พิมพ์ 1 ~ 100 โดยการเรียกซ้ำ
แพ็คเกจ com.lanhuigu.base; cursiontest คลาสสาธารณะ {ส่วนตัวคงที่ int i = 0;/** * พิมพ์ซ้ำ 1 ถึง 100 */public static void testcursion01 () {i ++; // ตัวเองจะตายหาก (i <= 100) {// callback เมื่อน้อยกว่าหรือเท่ากับ 100 System.out.println (i); TestCursion01 (); // การโทรกลับ: โทรเอง} else {system.out.println ("เกมมากกว่า!");}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testcursion01 (); // พิมพ์ 1 ~ 100}}}}ตัวอย่างที่ 2: คำนวณแบบกลับมาใหม่ของจำนวนหนึ่ง
แพ็คเกจ com.lanhuigu.base; cursiontest คลาสสาธารณะ {/***คำนวณแบบฟอสทรีทอเรียลของจำนวนหนึ่ง*/public Static int testactorial (int n) {ถ้า (n == 1) {return 1;} {return n*testactorial (n-1);}} คำนวณแฟคทอเรียลของ 5}}เกี่ยวกับการคำนวณแบบเรียกซ้ำแฟคทอเรียล, แผนผังโครงสร้างหน่วยความจำแบบเรียกซ้ำไดอะแกรม:
ครั้งแรกตั้งเส้นยาวในที่สุดปิดเส้นแล้วดึงปลาขึ้นฝั่ง
สรุป
ข้างต้นคือทั้งหมดที่เกี่ยวกับการวิเคราะห์ตัวอย่างของอัลกอริทึมแบบเรียกซ้ำ Java ในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!