พวกเราเคยเจอปัญหา แบบนี้บ้างไหมครับ ปัญหาที่มีลักษณะเดียวกัน ซ้ำ ๆ หลาย ๆ รอบ พวกเราลองไปชมสถานการณ์ ตัวอย่างต่อไปนี้ดูนะครับ ภัทรพล วันนี้เดี๋ยวเรามาช่วยกันจัดโต๊ะตรงนี้กันนะ เดี๋ยวเราเอาหนังสือ สมุด และปากกาไว้ใต้โต๊ะ แล้วก็เอาเก้าอี้ไว้บนโต๊ะครับ อ้าว แล้วไม่ทำต่อล่ะ ก็ครูไม่ได้สั่งผมนี่ครับ โอเค ถ้าอย่างนั้น เราเอาหนังสือ สมุด และปากกาไว้ใต้โต๊ะ แล้วเอาเก้าอี้ไว้บนโต๊ะครับ เอ๊ะ เราควรจะสั่งอย่างไร เพื่อให้สั่งครั้งเดียว แล้วสามารถทำงานได้ตลอดนะ อ๋อ ใช้คำสั่งทำซ้ำเข้ามาช่วยดีกว่า เราเอาหนังสือ สมุด และปากกาไว้ใต้โต๊ะ แล้วเอาเก้าอี้ไว้บนโต๊ะครับ แล้วเราทำจนกระทั่งหมดทุกตัวเลยครับ ครับ โอเค เรียบร้อย ขอบคุณมาก จากสถานการณ์ตัวอย่าง เราจะพบว่าคุณครูได้สั่งงานให้นักเรียน ทำการจัดโต๊ะ โดยใช้คำสั่งทีละคำสั่ง แต่คุณครูจำเป็นจะต้องสั่งคำสั่งหลายครั้งมาก คุณครูจึงเลือกใช้การทำซ้ำมาแก้ปัญหา นอกจากการทำซ้ำ ที่เราพบเจอในชีวิตประจำวันแล้ว เรายังสามารถพบเจอการทำซ้ำ ในสถานการณ์อื่น ๆ ได้อีกครับ เราลองมาชมตัวอย่าง ครับ เกมทายเลข เกมทายเลขนั้นเริ่มจากแบ่งผู้เล่นเป็น 2 ฝ่าย ฝ่ายแรกจะเป็นผู้เขียนคำตอบไว้ในกระดาษ ซึ่งมีค่าตั้งแต่ 0 จนถึง 100 จากนั้นให้ฝ่ายที่ 2 ทายตัวเลข เมื่อฝ่ายที่ 2 ทายตัวเลขมีค่ามากกว่าคำตอบ ให้ฝ่ายแรกบอกว่าค่ามากเกินไป ฝ่ายที่ 2 ทายตัวเลขอีก ถ้ามีค่าน้อยกว่าคำตอบ ให้ตอบว่าค่าน้อยเกินไป และเมื่อฝ่ายที่ 2 ทายตัวเลขถูกต้อง ฝ่ายแรกจะตอบว่าทายถูกต้อง จากนั้นจะสลับกันเล่น โดยฝ่ายไหนทายตัวเลขได้น้อยครั้งกว่า จะเป็นผู้ชนะ เราไปชมวิดีโอสาธิตการเล่นเกมทายเลขกันครับ เราเขียนเสร็จแล้วเริ่มทายได้เลย 45 ค่ามากเกินไป 20 ค่าน้อยเกินไป 30 ค่าน้อยเกินไป 39 ค่ามากเกินไป 33 ทายถูกแล้ว เราเขียนเสร็จแล้วมาทายกัน 98 มากเกินไป 71 น้อยเกินไป 82 ถูกแล้ว เมื่อเราทำกิจกรรมเกมทายเลข เรียบร้อยแล้วนะครับ พวกเราลองร่วมกันเขียนรหัสลำลอง ของเกมทายเลขนี้ดูนะครับ เป็นอย่างไรบ้างครับ เขียนรหัสลำลองกันเสร็จแล้วใช่ไหม ลองดูนะครับ ว่าเหมือนของผมหรือเปล่า เริ่มต้นจากเราสุ่มตัวเลข ตั้งแต่ 1 จนถึง 100 ครับ จากนั้นไปเก็บไว้ในตัวแปร secret และจะทำคำสั่งต่อไปนี้ไปเรื่อย ๆ เริ่มจากเรารับค่าจากผู้เล่นที่ทายเป็นจำนวนเต็ม มาเก็บไว้ในตัวแปร answer จากนั้นตรวจสอบครับ ว่าตัวแปร answer มีค่าน้อยกว่า secret ไหม ถ้าใช่ เราจะตอบผู้เล่นไปว่าค่าน้อยเกินไป แต่ถ้าไม่ใช่ เราจะมาตรวจสอบอีกครับ ว่าตัวแปร answer มากกว่า secret หรือเปล่า ถ้าใช่ เราจะตอบผู้เล่นไปว่าค่ามากเกินไป และถ้าตัว answer มีค่าเท่ากับ secret เมื่อไหร่ เราก็จะตอบผู้เล่นไปว่าทายถูกแล้ว และให้จบการทำงาน แต่ในกรณีที่ยังทายไม่ถูก เราจะวนกลับไปรับค่ามาใหม่ และตรวจสอบใหม่อีกครั้งหนึ่งไปเรื่อย ๆ จนกระทั่งเจอเงื่อนไขจบการทำงานครับ การเล่นเกมทายเลข แล้วใช้วิธีการทายแบบสุ่ม จำนวนครั้งในการทายน้อยที่สุด และพบคำตอบ คือ 1 ครั้ง แต่จำนวนครั้งในการทายมากที่สุด จะมีโอกาสถึง 100 ครั้ง แต่ถ้าเรามีกระบวนการหรือวิธีการ ในการค้นหาข้อมูล เราจะใช้จำนวนครั้งในการทายน้อยที่สุด และพบคำตอบคือ 1 ครั้งเช่นกัน แต่จำนวนครั้งในการทายมากที่สุด จะเหลือเพียงแค่ 7 ครั้งเท่านั้น เราลองหาข้อมูลเกี่ยวกับการค้นหาข้อมูล หรือการ Search ข้อมูลดูนะครับ Binary Search ผมว่าน่าสนใจเลยทีเดียวนะครับ ลองหาข้อมูลดูนะครับ ปัญหาอย่างหนึ่งของการทำซ้ำ คือแล้วเมื่อไหร่ล่ะ เราจึงจะหยิบการทำซ้ำนั้นมาใช้งาน เราลองกลับไปศึกษาเรื่องการพิจารณารูปแบบ หรือ Pattern Recognition เราจะพบว่าเมื่อไหร่ก็ตาม ที่เราพิจารณารูปแบบการแก้ปัญหา แล้วพบว่ามีรูปแบบการแก้ปัญหา ที่เหมือน ๆ กัน เราก็จะสามารถหยิบการทำซ้ำ มาแก้ปัญหาในส่วนนี้ได้ครับ จากบทเรียนที่เรียนมา เราจะพบว่าการทำซ้ำนั้น มีอยู่ 2 รูปแบบใหญ่ ๆ ครับ รูปแบบแรก คือ การทำซ้ำที่มีจำนวนรอบที่ชัดเจน อย่างเช่น คุณครูสั่งให้นักเรียนยกโต๊ะครับ จะสังเกตว่านักเรียนจะทำไปเรื่อย ๆ จนกระทั่งหมดจำนวนโต๊ะก็จะหยุดการทำงาน กับอีกรูปแบบหนึ่งครับ คือ การทำซ้ำที่ไม่มีจำนวนรอบที่ชัดเจนครับ แต่จะจบการทำงานก็ต่อเมื่อตรงตามเงื่อนไข ยกตัวอย่างเช่น เกมทายเลขครับ จะสังเกตว่าเกมทายเลข จะไม่รู้ว่าจะจบการทำงานเมื่อครั้งที่เท่าไร แต่จะจบการทำงานก็ต่อเมื่อตรงตามเงื่อนไขครับ แล้วพวกเราเคยพบการทำซ้ำในรูปแบบใดบ้าง และเป็นอย่างไร ลองคิดดูนะครับ