뚠뚠멍의 생각들

การเพิ่มประสิทธิภาพการเรียกซ้ำแบบหาง (Tail Call Optimization)

สร้าง: 2024-10-12

สร้าง: 2024-10-12 18:47

ขณะที่กำลังศึกษาการทดสอบการเขียนโค้ดและการเพิ่มเอฟเฟ็กต์แอนิเมชันลงในข้อความ

ระหว่างเขียนฟังก์ชันแบบเรียกซ้ำ ฉันได้เรียนรู้แนวคิด TCO ด้วยความช่วยเหลือของ AI


การเพิ่มประสิทธิภาพการเรียกซ้ำแบบหางช่วยป้องกันการล้นสแต็กที่เกิดจากการเรียกซ้ำและทำให้การใช้หน่วยความจำมีประสิทธิภาพมากขึ้น


ใน JavaScript มีการระบุไว้ในโหมด strict ของ ES6 แต่ดูเหมือนว่าเบราว์เซอร์ที่รองรับยังไม่มากนัก


การเรียกซ้ำแบบทั่วไป


การเรียกซ้ำแบบหาง


วิธีการที่การคำนวณครั้งสุดท้ายของฟังก์ชันคือการเรียกฟังก์ชันแบบเรียกซ้ำเรียกว่าการเรียกซ้ำแบบหาง

ไม่จำเป็นต้องใช้เฟรมสแต็กของฟังก์ชันจึงช่วยเพิ่มประสิทธิภาพการใช้หน่วยความจำ!


วิธีการใช้การเรียกซ้ำแบบหางใน JavaScript คือการใช้เทคนิค trampoline

ในวิธีนี้ ฟังก์ชัน factorialTCO จะส่งคืนฟังก์ชันแทนที่จะส่งคืนผลลัพธ์โดยตรง

ฟังก์ชัน trampoline จะดำเนินการฟังก์ชันที่ส่งคืนเหล่านั้นต่อไปจนกว่าจะได้ผลลัพธ์สุดท้าย


มันเป็นเทคนิคที่สำคัญในโปรแกรมเชิงฟังก์ชัน น่าสนใจตรงที่แก้ปัญหาข้อเสียของฟังก์ชันแบบเรียกซ้ำทั่วไป (การล้นสแต็ก) ความจริงแล้ว ฉันไม่เข้าใจโดยสัญชาตญาณเมื่อดูเพียงแค่โค้ด ดังนั้นฉันจะต้องค้นคว้าเพิ่มเติมอีกครั้ง


ความคิดเห็น0

[Effective Java] รายการที่ 6: หลีกเลี่ยงการสร้างออบเจ็กต์ที่ไม่จำเป็นการสร้างออบเจ็กต์ที่ไม่จำเป็นนั้นนำไปสู่การสิ้นเปลืองหน่วยความจำ ดังนั้น สำหรับออบเจ็กต์ เช่น สตริง หรือบูลีน ควรใช้ลิเทอรัลหรือเมธอดจากโรงงานแบบคงที่แทน
제이온
제이온
제이온
제이온

April 28, 2024

[สำหรับผู้ไม่ใช่ผู้เชี่ยวชาญ ด้านการพัฒนาซอฟต์แวร์ เพื่อความอยู่รอด] 14. สรุปเนื้อหาสัมภาษณ์ทางเทคนิคที่ผู้พัฒนาซอฟต์แวร์มือใหม่ถามบ่อยสรุปคำถามทางเทคนิคที่มักถามในการสัมภาษณ์งานผู้พัฒนาซอฟต์แวร์มือใหม่ (พื้นที่หน่วยความจำ โครงสร้างข้อมูล ฐานข้อมูล ฯลฯ) หวังว่าจะเป็นประโยชน์ในการเตรียมตัวสัมภาษณ์งานด้านการพัฒนา
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

2024-11-18 สิ่งที่สนใจอย่างหลากหลายในชีวิต : ฉันใช้เวลาว่างทำอะไรบ้าง?บทความบล็อกที่เขียนเมื่อวันที่ 18 พฤศจิกายน 2024 บทความนี้กล่าวถึงงานอดิเรก การลงทุน การเรียนรู้ และกิจวัตรประจำวันต่างๆ ของผู้เขียน รวมถึงความกังวลเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานผ่านระบบอัตโนมัติ
Charles Lee
Charles Lee
Charles Lee
Charles Lee

November 19, 2024

[7 วัน] สร้างเกมสนุกๆ กับ AIนี่คือวันที่ 7 ของการพัฒนาเว็บเกมที่ใช้ AI ช่วยเหลือโดยอิงจาก D&D5e เราประสบความสำเร็จในการปรับปรุงประสิทธิภาพด้วยการแยกเลเยอร์ของแคนวาสและการเปลี่ยนวิธีการ ESM รวมถึงการใช้งานระบบปฏิสัมพันธ์กับสิ่งปลูกสร้างและเอฟเฟกต์การต่อสู้ ตรวจสอบได้ที่ ggoban.com/d2
꼬반
꼬반
꼬반
꼬반

November 13, 2024

LLM (แบบจำลองภาษาขนาดใหญ่) คืออะไร?LLM ย่อมาจากแบบจำลองภาษาขนาดใหญ่ ซึ่งเป็นเทคโนโลยีปัญญาประดิษฐ์ที่เรียนรู้จากข้อมูลข้อความจำนวนมหาศาล เพื่อทำความเข้าใจและสร้างภาษาที่คล้ายคลึงกับมนุษย์
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

April 1, 2024