Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ปัญหา Recursion: Snail Trail ใน JavaScript

สมมติว่าเรามีอาร์เรย์ดังนี้:

const arr = [
  [1, 2, 3, 4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10, 9, 8, 7]
];

อาร์เรย์นี้จะเป็นเมทริกซ์สี่เหลี่ยมจัตุรัสเสมอ

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์นี้และสร้างอาร์เรย์ใหม่โดยการนำองค์ประกอบมาต่อกันแบบเกลียวเข้าไปจนถึงจุดกึ่งกลาง (Snail trail)

ดังนั้น ผลลัพธ์สำหรับอาร์เรย์ข้างต้นควรเป็น:

const output = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];

เราจะแก้ปัญหานี้โดยใช้ Recursion

ตัวอย่าง

const arr = [
  [1, 2, 3, 4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10, 9, 8, 7]
];
const spiralForm = arr => {
  return arr.length > 1 ?
    arr.splice(0, 1)[0]
    .concat(spiralForm(arr[0].map((c, i) => {
      return arr.map(r => r[i]);
    })
    .reverse())) :
    arr[0];
};
console.log(spiralForm(arr));

ผลลัพธ์

โค้ดนี้จะแสดงผลลัพธ์ดังต่อไปนี้บนคอนโซล:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]