เราต้องสร้างฟังก์ชันที่รับอาร์กิวเมนต์จำนวนเท่าใดก็ได้ (Number literals) รวมเข้าด้วยกันแล้วส่งคืนผลคูณของตัวเลขเมื่อคำตอบมีความยาวเพียง 1 หลักเท่านั้น
ตัวอย่างเช่น −
หากอาร์กิวเมนต์คือ −
16, 34, 42
เราต้องรวมเข้าด้วยกันก่อน -
16+34+42 = 92
แล้วคูณกันไปเรื่อยๆ จนได้เลข 1 หลักแบบนี้ −
9*2 = 18 1*8 = 8
เมื่อได้ตัวเลขหนึ่งหลักแล้ว เราต้องคืนค่าจากฟังก์ชันของเรา
เราจะแบ่งสิ่งนี้ออกเป็นสองหน้าที่ -
-
ฟังก์ชันหนึ่งรับตัวเลขและส่งคืนผลิตภัณฑ์ของตัวเลข เราจะใช้การเรียกซ้ำในการดำเนินการ ให้เรียกฟังก์ชันนี้ว่า product() แรก
-
ฟังก์ชันที่สองเรียกฟังก์ชัน product() นี้ซ้ำๆ และตรวจสอบว่าผลิตภัณฑ์มีตัวเลข 1 หลักหรือไม่ ฟังก์ชันจะส่งคืนผลิตภัณฑ์มิฉะนั้นจะวนซ้ำ
รหัสสำหรับการทำงานทั้งหมดนี้จะเป็น -
ตัวอย่าง
const recursiveMuliSum = (...numbers) => {
const add = (a) => a.length === 1 ? a[0] : a.reduce((acc, val) => acc+val);
const produce = (n, p = 1) => {
if(n){
return produce(Math.floor(n/10), p*(n%10));
};
return p;
};
const res = produce(add(numbers));
if(res > 9){
return recursiveMuliSum(res);
}
return res;
};
console.log(recursiveMuliSum(16, 28));
console.log(recursiveMuliSum(16, 28, 44, 76, 11));
console.log(recursiveMuliSum(1, 2, 4, 6, 8)); ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
6 5 2