Мы все знаем ряд фибоначчи, когда k = 2.
I.e.: 1,1,2,3,5,8,13
Но это 2-фибоначчи. Таким образом, я могу считать третий-фибоначчи:
1,1,2,4,7,13,24
И 4-фибоначчи:
1,1,2,4,8,15,29
... и так далее
То, что я прошу, является алгоритмом для вычисления элемента "n" внутри ряда k-фибоначчи.
Вот так: если я попрошу fibonacci(n=5,k=4)
, результат должен быть: 8
, т.е. пятый элемент внутри серии 4-фибоначчи.
Я не нашел его нигде в Интернете. Резолюция, которая могла бы помочь, могла быть mathworld
Кто-нибудь? И если вы знаете python, я предпочитаю. Но если нет, любой язык или алгоритм могут помочь.
Совет Думаю, что это может помочь: Пусть анализируется ряд k-фибоначчи, где k будет идти от 1 до 5
k fibonacci series
1 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, ...
2 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
3 1, 1, 2, 4, 7, 13, 24, 44, 81, ...
4 1, 1, 2, 4, 8, 15, 29, 56, 108, ...
5 1, 1, 2, 4, 8, 16, 31, 61, 120, ...
Анализируя это, мы видим, что массив [0: k] по ряду k-фибоначчи равен предыдущий ряд фибоначчи, и он продолжается до k = 1
то есть. (Я постараюсь показать, но я не нахожу правильный способ сказать это):
k fibonacci series
1 1,
2 1, 1,
3 1, 1, 2,
4 1, 1, 2, 4,
5 1, 1, 2, 4, 8,
Надеюсь, я как-то помог решить эту проблему.
[РЕШЕНИЕ в python (если кому-то нужно)]
class Fibonacci:
def __init__(self, k):
self.cache = []
self.k = k
#Bootstrap the cache
self.cache.append(1)
for i in range(1,k+1):
self.cache.append(1 << (i-1))
def fib(self, n):
#Extend cache until it includes value for n.
#(If we've already computed a value for n, we won't loop at all.)
for i in range(len(self.cache), n+1):
self.cache.append(2 * self.cache[i-1] - self.cache[i-self.k-1])
return self.cache[n]
#example for k = 5
if __name__ == '__main__':
k = 5
f = Fibonacci(k)
for i in range(10):
print f.fib(i),