Quiero obtener todas las cadenas de longitud k de la lista de caracteres dada. Ya escribí la función recursiva y funciona bien. Pero mi versión de generador no funciona en absoluto. ¿Cómo puedo arreglar mi segunda función? Muchas gracias.
// recursive version function product_rec(arr, k) { if (k == 1) return arr; let res = []; for (const elem of arr) { for (const s of product_rec(arr, k - 1)) { res.push(elem + s); } } return res; } var p = product_rec(['0', '1'], 2); console.log(p); // [ '00', '01', '10', '11' ] // RangeError: Maximum call stack size exceeded function* product_rec_gen(arr, k, result) { if (k == 1) { for (const elem of arr) yield elem; } for (const elem of arr) { for (const s of product_rec_gen(arr, k - 1)) { yield elem + s; } } } var p = product_rec_gen(['0', '1'], 2); // RangeError: Maximum call stack size exceeded for (const e of p){ console.log(e); }Iterar cada elemento de la matriz de entrada sin importar su longitud, manejando el caso k==1 dentro del bucle. Forme la matriz de resto para cada elemento y combine ese elemento con la llamada recursiva usando ese resto...
function* product_rec(arr, k) { for (let i = 0; i < arr.length; i++) { if (k === 1) { yield [arr[i]]; } else { const rest = product_rec(arr.slice(i+1), k-1); for (let el of rest) { yield [arr[i], ...el]; } } } } const generator = product_rec(['a', 'b', 'c', 'd'], 2); console.log(generator.next().value) console.log(generator.next().value) console.log(generator.next().value) console.log(generator.next().value) console.log(generator.next().value) console.log(generator.next().value)