рекурсивный вывод последовательных чисел с указанным шагом
Необходимо написать рекурсивную функцию, которая выводит числа от 0 до введенного числа в с шагом 2. Разделитель - пробел. Вот что у меня получается, но не совсем:
let i = 0
function t2(n) {
i++
if (i > n) {
return i + ' ' + t2(n + 2)
} else {
return ''
}
}
console.log(t2(10))
Ответы (4 шт):
Автор решения: Aleksandr Belous
→ Ссылка
Можно так, используя итеративный процесс:
const showNumbers = (max) => {
const iter = (acc, value) => {
acc.push(value);
if (value + 2 <= max) {
return iter(acc, value + 2);
}
return acc
}
const numbers = iter([], 0);
return numbers.join(' ');
};
console.log(showNumbers(20)); // 0 2 4 6 8 10 12 14 16 18 20
А можно используя рекурсивный процесс. Первый вариант лучше, т.к. нет лишних аргументов + интуитивно понятен. Здесь пришлось добавить отдельный аргумент, который нельзя использовать. И он будет подсвечиваться в IDE, что тоже плохо. Решайте сами, что использовать.
const showNumbers2 = (max, result = max) => {
if (max % 2 !== 0) {
return showNumbers2(max - 1, max - 1);
}
if (max === 0) {
return result;
}
return showNumbers2(max - 2, `${max - 2} ${result}`);
};
Автор решения: Виталий Шебаниц
→ Ссылка
function func(lastValue, currentValue = 0, result = []) {
if (currentValue > lastValue){
return result.join(' ');
} else {
result.push(currentValue);
return func(lastValue, currentValue + 2, result)
}
}
console.log(func(10))
Автор решения: Gojira
→ Ссылка
Поправьте, если я ошибусь, но это не рекурсивная функция.
Если Вам нужно выводить числа с интервалом - то цикл в помощь.
function t2(n) {
let i = 0;
do {
i = i + 2;
console.log(i);
} while (i < n);
}
t2(10)
Автор решения: Zoomy148
→ Ссылка
Если я правильно понял задачу, то тут можно сделать с помощью обычного цикла
function t2(n) {
let k = '';
for (let i =0 ; i < n ; i+= 2) {
k+= i + ' '
}
return k;}