读书人

数据结构(折半查找算法改写成递归算法

发布时间: 2012-05-01 12:48:58 作者: rapoo

数据结构(折半查找算法改写成递归算法)(强烈推荐!)
int BinSearch(SSTable s, int low, int high, KeyType k)
/* Index the element which key is k */
/* in StaticSearchTable s. */
/* Return 0 if x is not found. */
{
? int mid;
? if(low<=high)
? { ?
? mid=(low+high)/2;
??
? if(s.elem[mid].key==k)
? return mid;?
??
? if(s.elem[mid].key>k)
? return BinSearch(s,low,mid-1,k);
? //新上界 mid后退一格 否则Stack Limit
? ?
? if(s.elem[mid].key<k)
? return BinSearch(s,mid+1,high,k);
? //新下界mid往前一格 否则Stack Limit
? }
? else return 0;
??
??
??
}
?文字部分是我的理解?

? 我不明白为什么把 return BinSearch(s,low,mid-1,k);和return BinSearch(s,mid+1,high,k);
? 改成 return BinSearch(s,low,mid,k);和return BinSearch(s,mid,high,k); 之后就提示stack limit 为什么呢?是我的编译器的问题吗?

[解决办法]
你可以模拟一下.后者死循环一样的递归调用,永不结束
[解决办法]
假如SSTable s.elem[].key 一共有两个数,

所以先执行

C/C++ code
BinSearch(SSTable s, 0, 1, KeyType k){    low = 0, high = 1, low <= high;    mid = (low + high)/2 = 0;    if(...)        return BinSearch(s, 0, -1, k); //low > high 递归停止    if(...)        return BinSearch(s, 1, 1, k); //low <= high 接着递归,但最终可以停止} 

读书人网 >C语言

热点推荐