เราต้องสร้างฟังก์ชันที่รับอาร์กิวเมนต์ได้หลายตัว (ตัวเลข) บวกมันเข้าด้วยกัน และคืนค่าผลคูณของหลักเมื่อคำตอบเหลือแค่ 1 หลัก
ตัวอย่าง −
ถ้าอาร์กิวเมนต์คือ −
16, 34, 42
เราต้องบวกเข้าด้วยกันก่อน −
16+34+42 = 92
แล้วคูณหลักต่อเนื่องจนได้ 1 หลักแบบนี้ −
9*2 = 18 1*8 = 8เมื่อได้ตัวเลข 1 หลัก เราต้องคืนค่าจากฟังก์ชันของเรา
เราจะแยกเป็นสองฟังก์ชัน −
ฟังก์ชันหนึ่งรับตัวเลขและคืนค่าผลคูณของหลัก เราจะใช้ recursion เรียกฟังก์ชันนี้ว่า 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