เริ่มจากตัวเลข 1 และทำซ้ำการบวก 5 หรือคูณ 3 จะสามารถสร้างตัวเลขใหม่ได้จำนวนไม่จำกัด เราต้องเขียนฟังก์ชันที่รับตัวเลขหนึ่งตัว ลองหาลำดับของการบวกและคูณที่ผลิตตัวเลขนั้น และคืนค่า boolean ว่ามีลำดับแบบนั้นหรือไม่
ตัวอย่างเช่น:
ตัวเลข 13 สามารถทำได้โดยคูณ 3 ก่อน แล้วบวก 5 สองครั้ง ดังนั้นฟังก์ชันควรคืน true สำหรับ 13 ในขณะที่ตัวเลข 15 ไม่สามารถทำได้เลย ฟังก์ชันควรคืน false สำหรับ 15
แนวทาง
เราจะใช้แนวทาง recursive โดยลองทุกความเป็นไปได้ที่นำไปสู่คำตอบที่ต้องการ โค้ดสำหรับแนวทางนี้จะเป็นดังนี้:
ตัวอย่างโค้ด
const sequenceExists = (num, curr = 1) => {
if (curr > num) {
return false;
}
if (curr === num) {
return true;
}
return sequenceExists(num, curr + 5) || sequenceExists(num, curr * 3);
};
console.log(sequenceExists(18));
console.log(sequenceExists(15));
console.log(sequenceExists(32));
console.log(sequenceExists(167));
console.log(sequenceExists(17));
console.log(sequenceExists(1119));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
true false true true false true