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"
Я не знаю, что это значит. Как это превращается в ноль.
Заставить метод фактически возвращать сгенерированное число:
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 позволяет вам передать объект в блок и всегда возвращать сам объект.
.tap
Когда вы делаете рекурсию, рекурсивная функция (или method в термине Ruby) должна возвращать значение. Метод Ruby puts, с другой стороны, возвращает nil.
method
puts
nil
Вы должны переместить метод puts из рекурсии, чтобы fibs_rec Метод всегда возвращает значение.
fibs_rec