0Pricing
Zig Academy · บทเรียน

การเรียกซ้ำและการคืนค่าหลายค่า

ฟังก์ชันที่เรียกตัวเองและแตกแขนงออก

การเรียกซ้ำและการคืนค่าหลายค่า เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ไวยากรณ์ฟังก์ชันและชนิดค่าที่คืน
  2. การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง
  3. ฟังก์ชัน pub และการมองเห็น
  4. การเรียกซ้ำและการคืนค่าหลายค่า
← กลับไปที่ Zig Academy