При объявлении переменных вы упустили использование ключевого слова var
и особенно перед объявлением i
в операторе for
. Это важно, поскольку переменные без ключевого слова var
определены в глобальной области , и каждый рекурсивный вызов использует одну и ту же переменную i
для for
l oop. Вот почему у него очень мало возможностей. См. Фиксированный код ниже:
s = ["A", "B", "C"]
function printAllKLength(set, k) {
n = set.length;
printAllKLengthRec(set, "", n, k);
}
function printAllKLengthRec(set, prefix, n, k) {
if (k == 0) {
console.log(prefix);
return;
}
for (var i = 0; i < n; i++) {
// ^^^ Notice var, it scopes the variable to the function otherwise, it will be global
newPrefix = prefix + set[i];
printAllKLengthRec(set, newPrefix, n, k - 1);
}
}
printAllKLength(s, 4)