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


