Для первого вопроса вы не можете удалить return a
и заменить на return barray
, потому что fibs_rec(n-1, barray) + fibs_rec(n-2, barray)
вернет array
вместо integer
.
def fibs_rec(n, barray = [])
return 1 if n == 1 || n == 0
a = fibs_rec(n-1, barray) + fibs_rec(n-2, barray) # a = [2] + [2] wrong!
barray << a
return barray # return an array[]
end
Более того, согласно описанию вашей проблемы, было бы лучше не писать в рекурсивной программе, но если вам требуется сделать рекурсивную программу, я бы предложил вам, чтобы функция fibs_rec
Вы написали, что не пытаетесь напечатать шаблон, но пытаетесь найти число Фибо в позиции n
. Например:
# According to your program, you will miss the first 0 of fibonacci sequence
# (0,) 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……..
fibs_rec(0) # return: 1
fibs_rec(1) # return: 1
fibs_rec(2) # return: 2
fibs_rec(3) # return: 3
fibs_rec(4) # return: 5
. . .
Если вы хотите распечатать последовательность, используя рекурсивную функцию fibs_rec
, вам нужно будет создать другую функцию для вызова ее с 0
до n
.
Есть много хороших ресурсов, объясняющих о Фибоначчи и рекурсивных там. Вы не совсем понимаете, как работает рекурсив. Постарайтесь сначала понять это. Удачи!