He leído toda la documentación sobre funciones recursivas y Math.max pero todavía no entiendo muy bien cómo funciona esta función. ¿Alguien puede explicar lo que está pasando aquí paso a paso? En particular, la segunda declaración de retorno que implica Math.max().
function findLongestWordLength(str) { // split the string into individual words const words = str.split(" "); // words only has 1 element left that is the longest element if (words.length == 1) { return words[0].length; } // if words has multiple elements, remove the first element // and recursively call the function return Math.max( words[0].length, findLongestWordLength(words.slice(1).join(' ')) ); } console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"));¿Por qué alguien escribiría algo tan terrible?
Veamos "hola adiós a todos"
Este código está diciendo:
La idea de dividir la cadena en palabras y luego volver a colocar todas las palabras excepto la primera en una cadena solo para que puedas llamarte a ti mismo de forma recursiva es bastante extraña.
Entonces, una ejecución típica se ve así:
findLongestWordLength('hello goodbye all') = max(5, findLongestWordLength('goodbye all')) = max(5, max(7, findLongestWordLength('all'))) = max(5, max(7, 3)) = max(5, 7) = 7Tenga en cuenta que este es el truco estándar de la recursividad. Usted prueba que el código funciona suponiendo que funciona en todo lo que es más corto.
Obviamente, este código funciona en todas las cadenas con una sola palabra. Y dada una cadena con n > 1 palabras, asume que obtendrá la respuesta correcta cuando la llame con una cadena con n - 1 palabras, y luego use eso para obtener la respuesta correcta para su cadena actual.