Quiero recorrer una matriz con una función recursiva, pero no sé cómo hacerlo.
Lo que quiero lograr es esto:
numbersArray .sumOfNumbers .numbersArray y repita hasta que se hayan calculado todos los números.numbersArray y repita.Esto es lo que tengo ahora. Solo obtiene el primer elemento de una matriz:
function unitTest(block1, block2, result = []) { let sumOfNumbers = [] let numbersArray = [ [9, 2, 3, 4, 5, 6, 7, 8, 9, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], ] block1 = numbersArray[0][0] block2 = numbersArray[1][0] sumOfNumbers = (block1 + block2 ) % 10 result.push(sumOfNumbers) console.log(sumOfNumbers) console.log(result) if (result.length == 10) { return result }else{ // unitTest() }En recursividad necesitas un caso base y un caso recursivo. Puse toda la matriz como un parámetro y un índice para saber qué elemento de la matriz estamos procesando. La recursividad de parada ocurre cuando ese índice es mayor que la matriz. En casos recursivos, tomamos 2 arreglos y hacemos las operaciones. Entonces, llamamos recursivos a los 2 bloques siguientes
function unitTest(numbersArray, arrayIndex, result = []) { if (arrayIndex + 1 < numbersArray.length) { var block1 = numbersArray[arrayIndex] var block2 = numbersArray[arrayIndex + 1] for (var i = 0; i < block1.length; i++){ sumOfNumbers = (block1[i] + block2[i]) % 10; result.push(sumOfNumbers); console.log(sumOfNumbers); } unitTest(numbersArray, arrayIndex + 2, result); } else { console.log(result); } } let sumOfNumbers = [] let numbersArray = [ [9, 2, 3, 4, 5, 6, 7, 8, 9, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], ] unitTest(numbersArray, 0)por lo que entiendo, está tratando de calcular la suma% 10 de cada elemento de la matriz 0-1, 2-3, 4-5, ...
El uso de la recursividad aquí no es necesario y un ciclo simple hará el trabajo.
Aquí está la solución que podría sugerir
const numbersArray = [ [9, 2, 3, 4, 5, 6, 7, 8, 9, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7], [5, 6, 7, 8, 9, 0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], [9, 4, 3, 2, 1, 0, 9, 8, 7, 6], [1, 2, 3, 4, 5, 6, 7, 8, 9, 7] ]; const results = []; for (let i = 0; i < numbersArray.length - 1; i += 2) { const result = numbersArray[i].map((value, index) => { return (value + numbersArray[i + 1][index]) % 10; }); results.push(result); } console.log(results); La constante de resultados es del tipo number[][] que contiene las matrices del cálculo para cada par de la matriz original.
Espero que te ayude :)