思路:
自己去看网上的概念贴
代码:
def fibonacci_sequence(num: int): # 按照待查找数列的大小,动态生成斐波那契数列
a, b = 0, 1
while a <= num-1:
yield a
a, b = b, a + b
yield a
return
def fibonacci_search(a: [], n: int, key: int)->int: # 斐波那契查找
low, high, k = 1, n, 0
F = fibonacci_sequence(n)
dynamic_F = []
for item in F:
dynamic_F.append(item)
while n > dynamic_F[k] - 1:
k += 1
for i in range(n, dynamic_F[k]-1):
a.append(a[n])
while low <= high:
mid = low + dynamic_F[k-1] - 1
if key < a[mid]:
high = mid - 1
k -= 1
elif key > a[mid]:
low = mid + 1
k -= 2
else:
if mid <= n:
return mid
else:
return n
return 0
if __name__ == '__main__':
a = [0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99]
key = 47
print("key's index is:", fibonacci_search(a, len(a)-1, key))
输出:
key's index is: 5