Skip to main content

การเรียกซ้ำหางคืออะไร?

การเรียกซ้ำหางเป็นประเภทของวิธีการเขียนโปรแกรมการโทรที่วิธีการเรียกตัวเองจากนั้นส่งคืนค่าของการโทรครั้งที่สองนั้นทันทีกล่าวอีกนัยหนึ่งการเรียกซ้ำหางเกิดขึ้นเมื่อคำสั่งสุดท้ายภายในวิธีการเรียกอีกอย่างหนึ่งไปยังวิธีเดียวกันนั้นพารามิเตอร์ในการเรียกวิธีการที่สองโดยทั่วไปจะแตกต่างจากค่าแรก แต่ไม่จำเป็นต้องใช้เพื่อให้การเรียกซ้ำนี้ใช้วิธีการที่เรียกว่าภายในตัวเองจะต้องส่งคืนค่าคอนกรีตเช่นตัวเลขสตริงหรือวัตถุอื่น ๆวิธีการที่เป็นโมฆะซึ่งไม่คืนค่าไม่ทำงานได้ดีสำหรับการเรียกซ้ำ

ข้อกำหนดที่การเรียกซ้ำจะต้องเป็นคำสั่งสุดท้ายในวิธีการโทรไม่ได้หมายความว่าการเรียกซ้ำเป็นบรรทัดสุดท้ายในวิธีการการเรียกซ้ำหางที่เหมาะสมสามารถพบได้ภายในโครงสร้างควบคุมซึ่งหมายความว่าในซอร์สโค้ดโครงสร้างการควบคุมอาจสิ้นสุดวิธีการมากกว่าการโทรความแตกต่างที่สำคัญในกรณีนี้คือโครงสร้างการควบคุมไม่ใช่คำสั่งการเขียนโปรแกรม แต่เป็นส่วนหนึ่งของภาษาคอมพิวเตอร์ในตัว

การเรียกซ้ำหางมีอยู่ในภาษาคอมพิวเตอร์หลายภาษารวมถึง Java และ C ++บ่อยครั้งการโทรแบบเรียกซ้ำเหล่านี้สามารถเขียนใหม่ได้โดยใช้วิธีการอื่นเช่นสำหรับลูปในขณะที่ลูปหรือคำสั่ง gotoยูทิลิตี้ของการเรียกซ้ำจะพบเมื่อสร้างการโทรตามลำดับจำนวนมากไปยังวิธีเดียวกันการเรียกซ้ำมักจะเป็นวิธีที่สะอาดและง่ายที่สุดในการทำงานซ้ำ ๆ

ตัวอย่างทั่วไปของการเรียกซ้ำหางเป็นวิธีที่คำนวณแฟคตอเรียลของตัวเลขกระบวนการนี้เหมาะอย่างยิ่งเพราะเริ่มต้นที่หมายเลขใด ๆ ทุกหมายเลขก่อนที่จะคูณด้วยกันดังนั้นเพื่อค้นหาแฟคทอเรียล 5 กระบวนการที่เหมาะสมในการทำเช่นนั้นคือการคูณ 5*4*3*2*1การเรียกซ้ำเกิดขึ้นเนื่องจากวิธีการแบบแฟคทอเรียลนั้นมีโครงสร้าง: หากแฟคทอเรียลคือ 1, กลับ 1, มิฉะนั้นกลับแฟคทอเรียลของหมายเลขที่มอบให้กับวิธีการลบหนึ่งวิธีนี้ยังมีประโยชน์เช่นกันเพราะสามารถเขียนได้อย่างเท่าเทียมกันโดยใช้การเรียกซ้ำหางประเภทใดประเภทหนึ่งโดยมีหรือไม่มีคำสั่งควบคุมรอบ ๆ การโทรวิธีสุดท้าย

การเรียกซ้ำหางเป็นเพียงตัวอย่างหนึ่งของการเรียกซ้ำหลายประเภทแนวคิดในการเรียกซ้ำทุกประเภทนั้นเหมือนกันซึ่งในบางวิธีมีวิธีการเรียกตัวเองประเภทเหล่านี้ความแตกต่างของการเรียกซ้ำหางคือค่าของการโทรแบบเรียกซ้ำจะถูกส่งคืนทันทีและไม่มีอะไรเกิดขึ้นในวิธีการโทรหลังจากการโทรนั้น