рекурсивный вывод последовательных чисел с указанным шагом

Необходимо написать рекурсивную функцию, которая выводит числа от 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;}
→ Ссылка