简单分析递归与非递归实现代码
今天给朋友们带来二分查找算法非递归实现和递归实现,刚开始卡了许久,没有第一时间看出问题,现在把问题梳理一下,并给出解决方案,现在就给各位简单分析递归与非递归实现代码。
#include
int binSearch(int arr[], int low, int high, int key);
int binSearch2(int arr[], int low, int high, int key);
int binSearch3(int arr[],int start,int ends,int key);
int main() {
int arr[]={3,8,11,15,17,22,23,26,28,29,34};
//printf("%d",binSearch(arr,0,10,26));
printf("%d",binSearch3(arr,0,10,26));
return 1;
}
int binSearch(int arr[], int low, int high, int key) {
int flag=-1;
int mid = (low + high) / 2;
if (low > high) {
flag= -1;
} else {
if (arr[mid]
flag= binSearch(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
//比如要找的节点在下面这一层 那么这一层会返回下标上来 用flag接住嘛...
flag= binSearch(arr,low,mid-1,key);//又差一点忘记了用flag取接住返回值了
} else {
flag= mid;
}
}
return flag;
}
//ok==============================
int binSearch2(int arr[], int low, int high, int key) {
int mid = (low + high) / 2;
if (low > high) {
return -1;
} else {
if (arr[mid]
return binSearch2(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
return binSearch2(arr,low,mid-1,key);
} else {
return mid;
}
}
}
int binSearch3(int arr[],int start,int ends,int key){
int mid=-1;
while(start
mid=(start+ends)/2;
if(arr[mid]
}else if(arr[mid]>key){
ends=mid-1;
}else{
break;
}
}//上述循环结束后不一定就是 start>ends的 因为有break语句
if(start>ends){
mid=-1;
}
return mid;
}
以上就是简单分析递归与非递归实现代码,想必都已有了一定的了解,更多关于C语言的内容请继续关注爱站技术频道。