เราต้องสร้างฟังก์ชันที่รับอาร์กิวเมนต์จำนวนเท่าใดก็ได้ (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