Partilho em baixo solução alternativa. Penso que é mais fácil a leitura, dado que não utiliza a recursividade:
function cpfValido(cpf) {
let soma1 = 0;
for(let i = 0; i < cpf.length - 2; i++) {
soma1 += (10 - i) * cpf[i];
}
let soma2 = 0;
for(let i = 0; i < cpf.length - 1; i++) {
soma2 += (11 - i) * cpf[i];
}
const digVerificadorCalculado1 = 11 - (soma1 % 11);
const digVerificadorCalculado2 = 11 - (soma2 % 11);
const digVerificadorCPF1 = cpf.slice(9,10);
const digVerificadorCPF2 = cpf.slice(10,11);
return digVerificadorCalculado1 == digVerificadorCPF1 && digVerificadorCalculado2 == digVerificadorCPF2;
}
Cumprimentos