Как решить мой рекурсивный метод Фибоначчи в Ruby - PullRequest
0 голосов
/ 22 марта 2020
def fibs_rec(n)

  return 1 if n == 1 || n == 0

  puts fibs_rec(n-1) + fibs_rec(n-2) 

end 

fibs_rec(5)

Это дает мне ошибку

"undefined method '+' for nil:Nilclass"

Я не знаю, что это значит. Как это превращается в ноль.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Заставить метод фактически возвращать сгенерированное число:

def fibs_rec(n)
  return 1 if n == 1 || n == 0
  (fibs_rec(n-1) + fibs_rec(n-2)).tap do |result|
    puts result
  end
end 

.tap позволяет вам передать объект в блок и всегда возвращать сам объект.

0 голосов
/ 22 марта 2020

Когда вы делаете рекурсию, рекурсивная функция (или method в термине Ruby) должна возвращать значение. Метод Ruby puts, с другой стороны, возвращает nil.

Вы должны переместить метод puts из рекурсии, чтобы fibs_rec Метод всегда возвращает значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...