ความแตกต่างหลัก: ในการเขียนโปรแกรมการเรียกซ้ำสามารถอธิบายได้ด้วยการพิจารณาฟังก์ชั่นวนซ้ำ ฟังก์ชันเรียกซ้ำคือฟังก์ชันที่เรียกตัวเองอีกครั้งเพื่อทำซ้ำรหัส ในทางกลับกันการวนซ้ำทำได้โดยฟังก์ชันวนซ้ำซึ่งวนซ้ำส่วนหนึ่งของรหัส
ในการเขียนโปรแกรมการเรียกซ้ำและการวนซ้ำใช้เพื่อให้เกิดการทำซ้ำ พวกเขาอ้างถึงกระบวนการที่ทำซ้ำหลายครั้ง การเรียกซ้ำขึ้นอยู่กับวิธีการที่มีบางสิ่งอ้างอิงถึงตัวเองจนกว่าจะเจอเงื่อนไข วิธีการที่จะบอกว่าจะเรียกซ้ำถ้ามันสามารถเรียกตัวเองไม่ว่าโดยตรงหรือโดยอ้อมเช่น -
{
... ชื่อ () ...
}
หรือ
ชื่อโมฆะ ()
{
... เกม () ...
}
เกมเป็นโมฆะ () {
... ชื่อ () ...
}
สำหรับการเรียกซ้ำที่ประสบความสำเร็จคุณต้องจำไว้ว่าการเรียกทุกครั้งในกระบวนการเรียกซ้ำต้องทำให้การคำนวณง่ายขึ้น การเรียกซ้ำทำได้โดยกำหนดกรณีพื้นฐาน
int แฟคทอเรียล (int N)
{
ถ้า (N == 0) ส่งคืน 1;
อื่นกลับมา (N * แฟกทอเรียล (N-1));
}
ในตัวอย่างนี้การเรียกซ้ำสามารถมองเห็นได้ง่ายในคำสั่ง (N * แฟกทอเรียล (N-1)) ซึ่งมันเรียกฟังก์ชันแฟกทอเรียลอีกครั้ง การเรียกซ้ำเป็นประโยชน์อย่างมากเนื่องจากช่วยในการย่อรหัสให้สั้นลง อย่างไรก็ตามการสอบถามซ้ำจะทำให้ประสิทธิภาพลดลงเล็กน้อย
ฟังก์ชันแฟคทอเรียล (n)
{
var loop, ผลลัพธ์;
ผล = 1;
สำหรับ (ห่วง = 1; ห่วง <= n; ห่วง ++)
{
ผล = ผล * ห่วง;
}
ผลตอบแทน;
}
ในตัวอย่างนี้การวนซ้ำทำได้โดยใช้จำนวนเต็มตั้งแต่ 1 ถึง n และใช้คำสั่งวน <= n เป็นเกณฑ์ในการหยุดการวนซ้ำเพิ่มเติม ดังนั้นเราสามารถสรุปได้ว่าผลลัพธ์เดียวกันสามารถทำได้โดยใช้การสอบถามซ้ำและซ้ำ อย่างไรก็ตามพวกเขาทั้งสองขึ้นอยู่กับวิธีการที่แตกต่างกันเล็กน้อย อัลกอริทึมแบบเรียกซ้ำใด ๆ ยังสามารถเขียนได้โดยใช้การวนซ้ำ (ลูป)
การเปรียบเทียบระหว่างการเรียกซ้ำและการวนซ้ำ:
recursion | การย้ำ | |
คำนิยาม | การเรียกซ้ำหมายถึงฟังก์ชั่นการเรียกซ้ำที่มันเรียกตัวเองอีกครั้งเพื่อทำซ้ำรหัส | การวนซ้ำทำได้โดยฟังก์ชันวนซ้ำซึ่งวนซ้ำส่วนหนึ่งของรหัส |
จุดสำคัญ | กรณีพื้นฐานจะต้องมีการพิจารณา | ต้องกำหนดเงื่อนไขการเลิกจ้าง |
ประสิทธิภาพ | ค่อนข้างช้า | ค่อนข้างเร็ว |
การใช้ความจำ | ค่อนข้างมาก | ค่อนข้างน้อยกว่า |
รหัส | ที่มีขนาดเล็ก | อีกต่อไป |
การทำซ้ำไม่สิ้นสุด | การเรียกซ้ำไม่สิ้นสุดมีความสามารถในการทำงานล้มเหลวของระบบ | การวนซ้ำไม่สิ้นสุดใช้รอบของ CPU ซ้ำ ๆ |
โครงสร้าง | การเลือก | การทำซ้ำ |
ตัวแปรท้องถิ่น | ไม่ต้องการ | จำเป็นต้องใช้ |