#include #include #include #include #include using namespace std;int f[1005];void init(){ int i,j; f[0]=0; f[1]=1; for(i=2; i<1000; i++) f[i]=f[i-1]+f[i-2]; //以上进行斐波那契数组初始化}int Fibonacci_Search(int *a,int n,int key){ init(); int low=0,high=n-1,mid,k=0;//注意下标 int i,j; while(n>f[k]-1)k++;//这里执行完之后m,f[k]-1>n for(i=n; i key) { high=mid-1; k=k-1; } else if(a[mid] a[mid]时,新的查找范围是第mid+1个到第high个,此时范围个数为F[k-2] - 1个,即数组右边的长度,所以要在[(mid+1),(mid+1)+F[k - 2] - 1]范围内查找。 联系黄金分割比例来分析,黄金分割分成两部分,一段长(即是发f[k-1]),一段短(f[k-2])*/