@mikykonst

Как найти числа фибоначчи в заданном интервале?

Найти числа фибоначчи в заданном интервале[min, max];

Пример:
первое число в заданном интервале=10
последнее число в заданном интервале=1000
число Фибоначчи= 13
число Фибоначчи= 21
число Фибоначчи= 34
число Фибоначчи= 55
число Фибоначчи= 89
число Фибоначчи= 144
число Фибоначчи= 233
число Фибоначчи= 377
число Фибоначчи= 610
число Фибоначчи= 987
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 2
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
function genrateFib(a = 0, b = 0) {
  let start = 0;
  let next = 1;
  let state = true;
  let items = [];
  while (state) {
    if (next >= a) {
      items.push(next);
    }
    let olxNext = next;
    next = start + next;
    start = olxNext;
    if (next >= b) {
      return items;
    }
  }
}
Ответ написан
Найдите первое число Фибоначчи, попадающее в диапазон, по приближенной формуле, и дальше генерите сложением.

function fibRange( from, to) {
  if( isNaN(from) || isNaN(to) || from < 2 || from > to) {
    throw "Bad argument(s)";
  }
  
  var root5 = Math.sqrt(5), phi = (1 + root5)/2, logPhi = Math.log(phi);
  var nFrom = Math.ceil( Math.log((from - 0.5) * root5) / logPhi);
  var nTo = Math.floor( Math.log((to+0.5) * root5) / logPhi);

  function nthFib(n) {
    return Math.round( (Math.pow(phi, n) - Math.pow( -phi, -n)) / (2 * phi - 1));
  }
  
  var a = nthFib(nFrom);
  var result = [a];
  if( nFrom === nTo) return result;
  var i = nFrom + 1;
  var b = nthFib(i);
  while( i <= nTo) {
    result.push(b);
    b = a + b;
    a = b - a;
    i++;
  }
  
  return result;
}


fibRange(10,377)
/*
13,21,34,55,89,144,233,377
*/
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы