Ioi/recursion
หน้านี้รวมแบบฝึกหัดการเขียน recursion ด้วย Racket
เนื้อหา
เริ่มต้น
1. myprod (หาผลคูณ, คืน 1 ถ้าเป็นรายการว่าง)
> (myprod '()) 1 > (myprod '(1 2 3 4 5)) 120
2. unitlist
เขียนฟังก์ชัน unitlist รับรายการ lst ทีคืนค่า #t ถ้า lst เป็นรายการความยาว 1 (ไม่ต้องสนใจกรณีที่เป็นรายการว่าง)
> (unitlist '(1)) #t > (unitlist '(1 2 3)) #f
3. mymin
> (mymin '(1 2 3 -1 100)) -1
ฝึกฝน
1. mypushback
เขียนฟังก์ชัน mypushback รับ list และ element แล้ว return list ที่มี element ต่อท้าย
> (mypushback '(1 2 3 4) 10) '(1 2 3 4 10)
ฟังก์ชันที่เขียนทำงานในเวลาเท่าใด ถ้าลิสต์ที่ได้รับมีความยาว n
2. mylast
เขียนฟังก์ชัน mylast รับ list และคืนข้อมูลสุดท้ายใน list ไม่ต้องพิจารณากรณีที่ได้รับ list ว่าง
> (mylast '(10 20 30)) 30
3. myappend
เขียนฟังก์ชันรับ list สอง list และคืน list ที่เกิดจากการต่อกันของทั้งสอง list
> (myappend '(1 2 3) '(20 30 40)) '(1 2 3 20 30 40)
ท้าทาย
1. myrev
เขียนฟังก์ชัน myrev ที่รับรายการแล้วคืนรายการที่กลับหน้าหลัง
> (myrev '(1 3 4 5 6 7 8)) '(8 7 6 5 4 3 1)
สามารถเขียนฟังก์ชันอื่นประกอบได้ เวลาในการทำงานของฟังก์ชันที่เขียนเป็นเท่าใด ถ้ารายการมีความยาว n
2. myflat
เขียนฟังก์ชัน myflat ที่รับรายการ จากนั้นแปลงรายการเป็นแบบรายการชั้นเดียว สามารถใช้ฟังก์ชัน list? เพื่อตรวจสอบว่าข้อมูลเป็นรายการหรือไม่ได้
> (myflat '(1 2 (1 2 3 (4 5) 6) (((7) 8) 9) 10 (11))) '(1 2 1 2 3 4 5 6 7 8 9 10 11)