классика
function sum(...args) {
const [head,...tail] = args
if (Array.isArray(head)) {
return sum(...head.concat(tail))
} else {
return tail.length > 0
? sum(...tail) + Number(head)
: Number(head)
}
}
alert(sum(1,2,3,['4',[5,'6',[7]]])) // 28
p.s.: кейсы вида 'one' не обрабатывал
UPD: обновил имена переменных в соответствии с терминологией рекурсивного программирования