Por favor, ayúdame. No entiendo. ¿Por qué la segunda solución devuelve indefinido?
function digital_root(n) { return n < 10 ? n : digital_root(n.toString().split('').map(Number).reduce((a, b) => a + b)); } console.log(digital_root(12345678)); // expected output: 9 function digital_root(n) { if (n < 10) { return n; } else { digital_root(n.toString().split('').map(Number).reduce((a, b) => a + b)); } } console.log(digital_root(12345678)); // output: undefinedEsto sucede porque su segundo código ignora el valor que obtiene de la llamada recursiva. Deberías hacer algo con él... return .
function digital_root(n) { if (n < 10) { return n; } else { return digital_root(n.toString().split('').map(Number).reduce((a, b) => a + b)); } } console.log(digital_root(12345678)); No relacionado, pero puede combinar split y map haciendo Array.from . Además, la primera versión une las dos declaraciones de return con el operador condicional en una return de una expresión:
const digital_root = n => n < 10 ? n : digital_root(Array.from(n.toString(), Number).reduce((a, b) => a + b)); console.log(digital_root(12345678));