ในการเขียนโปรแกรมการเรียกซ้ำเป็นคำสั่งภายในรูทีนย่อยหรือฟังก์ชันที่บอกให้โปรแกรมรันรูทีนย่อยเดียวกันอีกครั้ง ประสิทธิภาพการทำซ้ำอาจเป็นผลโดยตรงของฟังก์ชั่นหรือฟังก์ชั่นที่สองอาจถูกเรียกว่าในทางกลับกันหมายถึงกลับไปที่ฟังก์ชั่นแรก การเรียกแบบเรียกซ้ำมีความคล้ายคลึงกันกับลูปแบบไม่สิ้นสุดที่หวั่น แต่รูทีนย่อยมักจะมีคำสั่งแบบมีเงื่อนไขที่บอกโปรแกรมเมื่อหยุดการวนซ้ำซ้ำ
แนวคิดของการเรียกซ้ำอาจเป็นภาพประกอบที่ดีที่สุดผ่านการใช้ตัวอย่าง สมมติว่า roofer กำลังใช้งูสวัดใหม่กับบ้าน ในการเริ่มต้นเขาจะต้องมีงูสวัดมัดอยู่บนหลังคา เมื่อเขาจับมัดแรกเข้าที่แล้วเขาต้องปีนลงบันไดดึงมัดอีกอันแล้วตอกเข้าที่ กระบวนการนี้จะดำเนินต่อไปตามลำดับของ "go, fetch, return" จนกว่าจะมีการใช้แผ่นไม้มุงหลังคาครั้งสุดท้าย ณ จุดนั้นผู้หลังคามีอิสระที่จะไปยังงานต่อไปหรือกลับบ้าน
ถึงแม้ว่าตัวอย่างนี้จะเป็นการทำให้ใหญ่เกินไป แต่ก็มีองค์ประกอบทั้งหมดของการโทรซ้ำ มีจุดเริ่มต้นที่ Roofer ต้องเรียกคืนสิ่งที่เขาต้องการกลับไปที่จุดเริ่มต้นและเมื่อตรงตามเงื่อนไขสุดท้ายให้หยุด นี่คือสิ่งที่โปรแกรมทำ มันเริ่มดำเนินการการดำเนินการกลับไปที่ตัวเองและสิ้นสุดลงเมื่อเงื่อนไขสิ้นสุดที่เกิดขึ้น
เงื่อนไขสิ้นสุดจะเรียกว่าเป็นตัวพิมพ์ใหญ่ มันเป็นสิ่งจำเป็นสำหรับการโทรซ้ำทั้งหมด ก็ไม่มีฟังก์ชั่นจะยังคงทำซ้ำ ที่ดีที่สุดส่งผลให้การระบายทรัพยากรหน่วยความจำของระบบ โดยปกติโอเวอร์โหลดจะทำให้โปรแกรมขัดข้องในบางจุด แต่เมื่อถึงเวลาที่พบปัญหาอาจเกิดความเสียหายอย่างมีนัยสำคัญ
โปรแกรมเมอร์ที่มีประสบการณ์อาจรู้จักความคล้ายคลึงกันระหว่างการเรียกซ้ำและ "วน" หรือ "ในขณะที่" วนซ้ำ ตัวอย่างเช่นหากเป้าหมายคือการหาจำนวนสินค้าคงคลังทั้งหมดของสต็อคทั้งหมดที่มีหมายเลขชิ้นส่วนมากกว่า 999 ลูป "for" จะบอกโปรแกรมให้ค้นหาอินสแตนซ์ที่ผ่านการรับรองทั้งหมดและ "ลูป" บอกโปรแกรมให้รันลูป เฉพาะในขณะที่เงื่อนไขที่ระบุนั้นถูกต้อง อาจมีการเรียกสายเรียกซ้ำเพื่อรวมคุณลักษณะบางอย่างของลูปเหล่านี้เข้ากับคำสั่ง "if-then-else" หากเงื่อนไขนี้เป็นจริงให้ทำเช่นนี้หรือทำสิ่งอื่นที่แตกต่างกันหากเงื่อนไขเป็นเท็จ การเรียกซ้ำโดยทั่วไปจะอนุญาตให้ใช้โค้ดแบบกระชับได้มากขึ้นและอนุญาตให้ส่งผ่านปัญหาไปยังฟังก์ชันที่ใกล้กว่าจุดที่ต้องการ


