k = 2 の場合、フィボナッチ数列は誰もが知っています。
すなわち:1,1,2,3,5,8,13
しかし、これは 2-フィボナッチです。このように、3 番目のフィボナッチを数えることができます。
1,1,2,4,7,13,24
そして 4-フィボナッチ:
1,1,2,4,8,15,29
…と続きます
私が求めているのは、k-フィボナッチ数列内の「n」要素を計算するアルゴリズムです。
このように: を要求するfibonacci(n=5,k=4)
と、結果は次のようになります: 8
、つまり、4-フィボナッチ数列内の 5 番目の要素。
ウェブのどこにも見つかりませんでした。役立つリソースは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, ...
これを分析すると、k-フィボナッチ数列の配列 [0: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),