การเรียกซ้ำและการคืนค่าหลายค่า
ฟังก์ชันที่เรียกตัวเองและแตกแขนงออก
การเรียกซ้ำและการคืนค่าหลายค่า เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฟังก์ชันที่เรียกตัวเอง
การเรียกซ้ำคือการที่ฟังก์ชันเรียกตัวเองเพื่อแก้ปัญหาส่วนที่เล็กลงของปัญหาเดิมทีละขั้น 🔁
การเรียกซ้ำทุกครั้งต้องมีกรณีฐาน
กรณีฐานคือจุดหยุด หากไม่มีกรณีนี้ ฟังก์ชันจะเรียกตัวเองไปเรื่อย ๆ จนสแตกเต็ม
กรณีเรียกซ้ำ
กรณีเรียกซ้ำจะเรียกฟังก์ชันอีกครั้งด้วยข้อมูลนำเข้าที่เล็กลง เพื่อค่อย ๆ เข้าใกล้กรณีฐาน
fn factorial(n: u64) u64 {
if (n <= 1) return 1;
return n * factorial(n - 1);
}ติดตามการเรียกใช้ขนาดเล็ก
การเรียก factorial(3) จะกลายเป็น 3 * factorial(2) แล้วเป็น 2 * factorial(1) เมื่อถึงกรณีฐานจะคืนค่า 1 จากนั้นคำตอบจะคูณย้อนกลับขึ้นมา
การเรียกซ้ำใช้สแตก
การเรียกแต่ละครั้งจะเพิ่มเฟรมลงในสแตก หากมีหลายระดับเกินไปจะทำให้สแตกเต็ม ดังนั้นควรจำกัดความลึกของการเรียกซ้ำให้อยู่ในระดับเหมาะสม
หลายปัญหาเขียนด้วยลูปแทนได้
ทุกสิ่งที่เขียนแบบเรียกซ้ำได้ สามารถเขียนเป็นลูปได้เช่นกัน ลูปไม่เพิ่มเฟรมสแตก จึงมักเป็นตัวเลือกที่ปลอดภัยกว่า
fn factorial(n: u64) u64 {
var acc: u64 = 1;
var i: u64 = 2;
while (i <= n) : (i += 1) acc *= i;
return acc;
}ฟังก์ชันคืนค่าชนิดเดียว
ฟังก์ชัน Zig มีชนิดค่าที่คืนเพียงชนิดเดียว แต่สามารถมีคำสั่งคืนค่าหลายคำสั่งที่ล้วนสร้างค่าชนิดนั้นได้
การคืนค่าก่อนกำหนดแยกแขนงการทำงาน
คุณสามารถคืนค่าก่อนกำหนดจากแขนงต่าง ๆ ได้ แต่ละเส้นทางจะคืนค่าชนิดที่ประกาศไว้และออกจากฟังก์ชันทันที
fn sign(n: i32) i32 {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}คืนค่าหลายค่าด้วยโครงสร้างข้อมูล
หากต้องการส่งหลายค่ากลับ ให้คืนโครงสร้างข้อมูลหรือทูเพิลที่รวมค่าเหล่านั้นไว้เป็นผลลัพธ์เดียว
fn divmod(a: u32, b: u32) struct { q: u32, r: u32 } {
return .{ .q = a / b, .r = a % b };
}แยกค่าจากผลลัพธ์
ผู้เรียกอ่านฟิลด์ที่รวมอยู่ด้วยชื่อ เช่น result.q และ result.r เพื่อใช้งานแต่ละส่วนที่คืนกลับมา
const res = divmod(7, 2);
// res.q is 3, res.r is 1คืนข้อผิดพลาดได้เช่นกัน
ฟังก์ชันอาจคืนยูเนียนข้อผิดพลาด เพื่อให้แขนงหนึ่งส่งสัญญาณความล้มเหลว ขณะที่แขนงอื่นคืนค่าปกติ
ตรวจสอบอย่างรวดเร็ว
คุณเขียนฟังก์ชันแบบเรียกซ้ำ แต่ฟังก์ชันไม่หยุดและโปรแกรมล้มเหลว คุณน่าจะลืมสิ่งใดมากที่สุด
ทบทวน
การเรียกซ้ำต้องมีกรณีฐานและการเรียกซ้ำที่ใช้ข้อมูลเล็กลง ฟังก์ชันมีชนิดค่าที่คืนเพียงชนิดเดียวแต่มีเส้นทางคืนค่าหลายเส้นทาง และโครงสร้างข้อมูลสามารถรวมผลลัพธ์หลายรายการไว้ด้วยกัน 🎯
คำถามที่พบบ่อย
บทเรียน “การเรียกซ้ำและการคืนค่าหลายค่า” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเรียกซ้ำและการคืนค่าหลายค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเรียกซ้ำและการคืนค่าหลายค่า”
ฟังก์ชันที่เรียกตัวเองและแตกแขนงออก คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเรียกซ้ำและการคืนค่าหลายค่า” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไวยากรณ์ฟังก์ชันและชนิดค่าที่คืน
- การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง
- ฟังก์ชัน pub และการมองเห็น
- การเรียกซ้ำและการคืนค่าหลายค่า