Как я могу go получить правильные выходные данные для пользователя в этой рекурсивной функции в ruby? - PullRequest
0 голосов
/ 24 марта 2020
def fibs_rec (n,barray = []) 
  return 1 if n == 1 || n == 0 

  a = fibs_rec(n-1,barray) + fibs_rec(n-2,barray)
  barray << a 
  return a 
end

для описания. Эта функция принимает аргумент n и печатает первые n чисел в последовательности Фибоначчи, но это не совсем так, как должно быть.

Я хочу напечатать первые n чисел Фибоначчи без каких-либо повторений. например, если n равно 4, вывод должен быть 0,1,1,2 вместо 0,1,0,1,1,0,1,1,2. Это в основном происходит, когда я печатаю barray внутри рекурсии, потому что у меня нет другой опции, и ради этого я удалил эту строку.

Дело в том, что я не могу удалить return a и заменить его на return barray , Мало того, что это испортит функциональность, fibs_re c ожидает получить число обратно для выполнения вычислений, и это не сработает, когда я верну barray только для отображения вывода пользователю, и я не могу печатать массив, потому что это будет продолжать выводить новые данные вместе со старыми данными, и я просто хочу, чтобы это был единый чистый вывод целых чисел Фибоначчи.

1 Ответ

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

Для первого вопроса вы не можете удалить 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

Fibonacci tree of 6

Более того, согласно описанию вашей проблемы, было бы лучше не писать в рекурсивной программе, но если вам требуется сделать рекурсивную программу, я бы предложил вам, чтобы функция 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.

Есть много хороших ресурсов, объясняющих о Фибоначчи и рекурсивных там. Вы не совсем понимаете, как работает рекурсив. Постарайтесь сначала понять это. Удачи!

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