简单分析递归与非递归实现代码

来源:爱站网时间:2018-11-22编辑:网友分享
今天给朋友们带来二分查找算法非递归实现和递归实现,刚开始卡了许久,没有第一时间看出问题,现在把问题梳理一下,并给出解决方案,现在就给各位简单分析递归与非递归实现代码。

今天给朋友们带来二分查找算法非递归实现和递归实现,刚开始卡了许久,没有第一时间看出问题,现在把问题梳理一下,并给出解决方案,现在就给各位简单分析递归与非递归实现代码。


#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]             start=mid+1;
        }else if(arr[mid]>key){
            ends=mid-1;
        }else{
            break;
        }
    }//上述循环结束后不一定就是 start>ends的  因为有break语句
    if(start>ends){
        mid=-1;
    }
    return mid;
}       


以上就是简单分析递归与非递归实现代码,想必都已有了一定的了解,更多关于C语言的内容请继续关注爱站技术频道。

上一篇:C++中抽象类是什么?和接口有啥区别

下一篇:C语言实现字符串数组排序的示例代码

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载