#python #recursion
#python #рекурсия
Вопрос:
Я хочу создать функцию, которая создает так называемую супер последовательность Фибоначчи, которая представляет собой список чисел, начиная с третьего члена, каждый член является суммой всех предыдущих членов. Он принимает 2 аргумента: t2 и n. t2 — это второй член в списке, а n — количество членов в списке. Например.
superFibSeq(10,10) >>> [1,10,11,22,44,88,176,352,704,1408]
superFibSeq(4,10) >>> [1, 4, 5, 10, 20, 40, 80, 160, 320, 640]
Я немного застрял на этом, не зная, с чего начать. Как я должен думать об этом, если я хочу использовать только рекурсию.
Комментарии:
1. Предположим, я уже вычислил
superFibSeq(t2, n-1)
, и я даю вам результат. Как бы вы использовали это для вычисленияsuperFibSeq(t2, n)
?
Ответ №1:
Кто-то выше дал отрицательные баллы за то, что сказал, что рекурсия в этой задаче действительно странная. Вы хотите рекурсию, конечно.
def f(t2, n):
if n == 0:
return []
elif n == 1:
return [1]
elif n == 2:
return [1, t2]
else:
temp = f(t2, n - 1)
return temp [sum(temp)]
Этот алгоритм O (n ^ 2), а не O (n)
Комментарии:
1. Чтобы вычислить f (n), я должен сначала вычислить f (n-1), а затем суммировать n-1 целых чисел. Таким образом, время вычисления f (n) равно 1 2 …. n-1 = O(n ^ 2). Я сдаюсь. Что вам не понравилось в этом алгоритме. Он точно ответил на вопрос.
2. OP думает об интересной проблеме для практики рекурсии. Они застревают и просят о помощи. Вы передаете им фрагмент кода, который решает проблему. Я не думаю, что это полезно.
3. Вы, кажется, думаете, что единственная цель SO — буквально ответить на вопрос пользователя. Я обнаружил, что часто, особенно с новыми плакатами, вам нужно сообщить им, что они задают неправильный вопрос. Я не знаю, заметил ли OP, что термины только что удвоились после третьего, но я бы счел нарушением долга не указывать на это и сообщить оригинальному постеру, что в реальной жизни это плохое использование рекурсии. Мне жаль, что вы, похоже, не согласны.
4. Спасибо за понимание! Я понимаю, что это был довольно плохой вопрос, если сравнивать O (n ^ 2) с O (n). Это был вопрос из набора проблем, и я понятия не имел, с чего начать.
Ответ №2:
Похоже, рекурсия — действительно странная идея для этой программы.
Ваши условия:
1, t2, (1 t2), 2(1 t2), 4(1 t2), 8(1 t2), .... 2**(n-2)(1 t2)
Комментарии:
1. Вы нашли формулу, и это здорово, но это не повод называть «действительно странной идеей» все, что не использует вашу формулу.
2. Странно использовать рекурсию для решения проблемы, которая даже не требует итерации.