12
ความท้าทายนี้เกี่ยวกับการเรียกซ้ำ (เธรดของตำรวจ)
ด้ายของตำรวจ ในเธรดนี้งานของคุณคือสร้างโปรแกรม / ฟังก์ชั่นตามการเรียกซ้ำเพื่อสร้างชุดเลขจำนวนเต็มใด ๆ โจรจะพยายามหาทางออกที่ไม่ใช่ recursive สั้นกว่าในหัวข้อโจร บทสรุปความท้าทาย ในหลาย ๆ ภาษาฟังก์ชั่นวนซ้ำสามารถทำให้งานการเขียนโปรแกรมง่ายขึ้นอย่างมาก อย่างไรก็ตามค่าโสหุ้ยไวยากรณ์สำหรับการเรียกซ้ำที่เหมาะสมอาจ จำกัด การใช้งานในโค้ดกอล์ฟ ตำรวจจะสร้างโปรแกรมหรือฟังก์ชั่นการจำนวนเต็มเดียวnซึ่งจะสร้างเป็นครั้งแรกที่nรายการของชุดจำนวนเต็มโดยใช้เพียงการเรียกซ้ำ 1 พวกเขาควรตรวจสอบให้แน่ใจว่ามีวิธีที่ไม่ใช้เวลาสั้นกว่าในการสร้างลำดับเพื่อทำเครื่องหมายรายการของพวกเขาว่าปลอดภัย โจรจะพยายามที่จะหาที่สั้นลงโปรแกรมหรือฟังก์ชั่นในภาษาเดียวกันสร้างชุดจำนวนเต็มเดียวกันโดยใช้ไม่มีการเรียกซ้ำ 2 หากการส่งของตำรวจไม่แตกภายในสิบวัน (240 ชั่วโมง) ตำรวจจะพิสูจน์ว่าในความเป็นจริงมีความเป็นไปได้ที่จะมีวิธีการแบบไม่เรียกซ้ำสั้นกว่าโดยเปิดเผยวิธีแก้ปัญหาของตนเอง จากนั้นพวกเขาอาจทำเครื่องหมายการส่งของพวกเขาเป็นที่ปลอดภัย ผู้ชนะของความท้าทายตำรวจจะสั้นที่สุด (ตามรหัสกอล์ฟ ) ส่งตาม recursion ที่ทำเครื่องหมายว่าปลอดภัย ผู้ชนะการแข่งขันจะเป็นโจรที่แก้ปัญหาได้มากที่สุด 1: จำเป็นต้องเรียกซ้ำในไวยากรณ์เท่านั้น คุณไม่จำเป็นต้องกังวลเกี่ยวกับการเพิ่มประสิทธิภาพการโทรหางเช่น 2: อีกครั้งไม่เรียกซ้ำในไวยากรณ์; ดังนั้นคุณจึงไม่สามารถโพสต์โซลูชันแบบเรียกซ้ำและอ้างสิทธิ์การคอมไพล์ไปยังลูปด้วยการเพิ่มประสิทธิภาพการโทรหาง ข้อกำหนดในการส่ง การส่งแต่ละครั้งจะใช้จำนวนเต็มเดียวn(เป็นศูนย์หรือหนึ่งฐาน) การส่งจะส่งออกหรือส่งคืนnรายการแรกของชุดตัวเลือกจำนวนเต็ม (โปรดทราบว่าชุดจำนวนเต็มนี้ต้องไม่ขึ้นอยู่กับn) วิธีการอินพุตและเอาต์พุตอาจแตกต่างกันระหว่างวิธีแบบเรียกซ้ำและแบบไม่เรียกซ้ำ ชุดเลขจำนวนเต็มอาจเป็นชุดแบบกำหนดค่าใด ๆ ที่มีความยาวอย่างน้อย 5 ชุดควรอธิบายอย่างถูกต้อง การส่งของคุณไม่ได้มีการทำงานโดยพลการขนาดใหญ่แต่ควรจะทำงานอย่างน้อยn n=5วิธีที่ไม่ใช่แบบเรียกซ้ำจะต้องสามารถทำงานได้อย่างน้อยเหมือนกับnวิธีแบบเรียกซ้ำหรือn=2^15-1อย่างใดอย่างหนึ่งน้อยกว่า …