[Dev] จะใช้คำสั่ง Loop หรือเขียน Recursive บน VB.NET ดีนะ

จากบทความตอนที่แล้ว ที่ืได้ทดสอบคำสั่ง Loop ในแบบต่าง ๆ ไปนั้น คราวนี้จะลองนำมาเทียบกับการเขียน Recursive Function ดูบ้าง เนื่องจากว่า สามารถเขียนคำสั่งในการทำงานซ้ำ ๆ ได้เช่นกัน

Visual-Basic-logo_Benchmark-Loop-vs-Recursive

โดยการทดสอบ จะใช้โจทย์เดียวกับบทความที่แล้ว ก็คือ การบวกเลขตั้งแต่ 0 ไปจนถึง n-1 ซึ่ง n ก็คือตัวเลขที่เราจะสุ่มขึ้นมา ซึ่งมีค่าอยู่ในช่วง 1-100 นั่นเอง

โดยผมจะเลือกใช้ Loop ชนิด For ที่ให้ผลการทำงานที่เร็วที่สุดจากการทดสอบที่แล้ว มาทดสอบเทียบกับ Recursive Function ไปดู Code กันเลยยยยย

 

For Loop

Loop For ก็ยกมาจากบทความที่แล้วเลย

 

Recursive Function

ส่วน Recursive Function ก็คือ Function ที่มีการเรียกใช้งาน Function ตัวเองซ้อน ๆ เข้าไปเรื่อย ๆ สำหรับโจทย์นี้ สามารถเขียนออกมาได้เป็นดังนี้

 

Benchmark

การวัดผลในด้านความรวดเร็วของการทำงาน เราจะใช้ Code เดิมจากบทความก่อน ๆ ดังนี้

ทดสอบด้วย Input ทั้งหมด 10,000,000 ตัว จำนวน 10 รอบ บน Windows XP 32 bit กับ Windows 8.1 64 bit ได้ผลออกมาเป็นดังนี้

ผลการ Benchmark Loop เทียบกับ Recursive บน Windows XP 32 bit
ผลการ Benchmark Loop เทียบกับ Recursive บน Windows XP 32 bit
ผลการ Benchmark Loop เทียบกับ Recursive บน Windows 8.1 64 bit
ผลการ Benchmark Loop เทียบกับ Recursive บน Windows 8.1 64 bit

ผลออกมาชัดเจนว่า Loop For ทำงานได้เร็วกว่า Recursive Function มาก โดยที่เมื่อทดสอบบน Windows XP 32 bit พบว่า ทำงานเร็วมากกว่า 4 เท่า ส่วนบน Windows 8.1 64 Bit ทำงานเร็วกว่าเกือบ 2 เท่าเลยทีเดียว

สำหรับการ Benchmark ครั้งนี้ ค่อนข้างชัดเจนนะครับ สรุปว่า…

Loop ทำงานได้เร็วกว่า Recursive Function มาก

 

สนใจอยากดู Code เต็ม ๆ ไปดูได้ที่ GitHub นะครับ ส่วนใครอยากลองรันโปรแกรมดูบ้าง สามารถ Download Loop vs Recursive.exe ไปรันดูได้ครับ (Require .NET Framework 3.5) แล้วอย่าลืมรายงานผลบ้างนะ…

2 Comments


  1. ผมงงครับ ว่าทำไมรีเคอซีฟถึงช้ากว่า for
    อาจารย์ที่มหาลัยผมแกบอกว่า รีเคอซีฟมันลดระยะเวลาการทำงานนินา
    หรืออาจจะบางภาษา?

    รบกวนตอบด้วยนะครับ _/\_

    Reply
    1. gplus-profile-picture

      ต้องลองทดสอบดูของแต่ละภาษาครับ เพราะแต่ละภาษา สร้างมาเก่งไปคนละด้านกัน

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *