Почему переменная функции возвращает неправильный расчет? - PullRequest
0 голосов
/ 10 июня 2018

У меня проблема с точностью моего кода.
Я сделал функцию для вычисления ряда Фибоначчи:

  function fibonacciseries(max_number, p, n) {
    if(p === undefined) { p = 0;}
    if(n === undefined) { n = 1;}
    if(n > max_number) { return 0; }
    console.log(n);
    return fibonacciseries(max_number, n, n + p)
    }
 fibonacciseries(3)

, но когда я запускаю этот код, console.log(n); показывает:

1
1
2
3

Я думаю, что результат должен быть 1 1 2, поэтому я действительно не могу понять, почему это происходит.Запуск fibonacciseries(4) & fibonacciseries(5) в порядке, так что не так в случае fibonacciseries(3)?Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Кажется, вы хотите, чтобы max_number было счетчиком количества чисел, которые должна записать функция, но на самом деле она записывает все числа Фибоначчи, меньшие или равные max_number.То есть fibonacciseries(20) не записывает 20 чисел, а записывает все числа Фибоначчи, которые меньше или равны 20. Это просто совпадение, что fibonacciseries(4) & fibonacciseries(5) в любом случае дают одинаковый результат.

Чтобы это исправить, не сравнивайте max_number с n, просто уменьшайте max_number при каждом вызове и останавливайте, когда он достигает нуля.Чтобы прояснить ситуацию, я предлагаю переименовать этот аргумент:

function fibonacciseries(count, p, n) {
  if(p === undefined) { p = 0;}
  if(n === undefined) { n = 1;}
  if(count <= 0) { return 0; }
  console.log(n);
  return fibonacciseries(count - 1, n, n + p)
}

console.log("Count of 3:");
fibonacciseries(3);
console.log("Count of 5:");
fibonacciseries(5);
console.log("Count of 7:");
fibonacciseries(7);
0 голосов
/ 10 июня 2018

отметьте n>=max_number, а не n>max_number.Попробуйте приведенный ниже обновленный код

function fibonacciseries(max_number, p, n) {
    if(p === undefined) { p = 0;}
    if(n === undefined) { n = 1;}
    if(n >= max_number) { return 0; }
    console.log(n);
    return fibonacciseries(max_number, n, n + p)
    }
 fibonacciseries(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...