@Quintis

Как сделать оптимизацию для рекурсии?

Прохожу задание на codewars -https://www.codewars.com/kata/58d9b332ac20339ecd00... ,как правильно применить thunk & trampoline оптимизацию в данном случае?
function thunk(fn, n, ac) {
  return fn.bind(null, n, ac);
}

const trampoline = res => {
  while (typeof res === 'function') { res = res(); }
  return res;
}

function chirp(n,string='') {
return  trampoline(n-1 && (thunk(chirp,n-1,string=string+'chirp-')) || string+'chirp')
}


chirp(9000)
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
В качестве шага рекурсии возьмём не вычитание единицы, а битовый сдвиг на единицу вправо (деление на 2 нацело) - так, при увеличении глубины рекурсии на единицу, будет обрабатываться один двоичный разряд исходного значения. Отсюда максимальная глубина рекурсии - двоичный логарифм исходного значения.

X = n => n ? (n & 1 ? '-chirp' : '') + X(n >> 1) + X(n >> 1) : ''
chirp = n => X(n).slice(1)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы