zoukankan      html  css  js  c++  java
  • 递归1--二分查找

    递归1--二分查找

    一、心得

    递归的时候注意返回值,返回的时候是返回到上一层 

    二、代码及结果

     1 /*
     2 二分查找:
     3 可写递推和递归
     4 其实这两个都只要把递推式子写出来就好
     5 
     6 查找的数大于mid,left=mid+1
     7 小于mid,right=mid-1
     8 边界条件,等于mid,输出即可 
     9 */ 
    10 /*
    11 心得:注意返回值,返回的时候是返回到上一层 
    12 */
    13 #include <iostream>
    14 using namespace std;
    15 //二分查找递归,设置标签 
    16 bool binarySearch1(int a[],int left,int right,int num){//初始left=0,right=length-1 
    17     bool flag=false; 
    18     int mid=(left+right)/2;
    19     //cout<<mid<<endl;
    20     //cout<<num<<" "<<a[mid]<<endl;
    21     if(left<=right){
    22         if(num==a[mid]) {
    23             flag=true;
    24         }
    25         else if(num>a[mid]){
    26             //cout<<"right:"<<a[mid+1]<<" "<<a[right]<<endl;
    27             flag=binarySearch1(a,mid+1,right,num);
    28             
    29         }
    30         else if(num<a[mid]){
    31             //cout<<"left:"<<a[left]<<" "<<a[mid-1]<<endl;
    32             flag=binarySearch1(a,left,mid-1,num);    
    33         }
    34     }
    35     return flag;
    36 } 
    37 
    38 //二分查找非递归,不设置标签 
    39 /*
    40 不设置返回值的时候,有栈可以存值 
    41 */
    42 bool binarySearch2(int a[],int left,int right,int num){//初始left=0,right=length-1 
    43     
    44     int mid=(left+right)/2;
    45     //cout<<mid<<endl;
    46     //cout<<num<<" "<<a[mid]<<endl;
    47     if(left<=right){
    48         if(num==a[mid]) {
    49             return true;
    50         }
    51         else if(num>a[mid]){
    52             //cout<<"right:"<<a[mid+1]<<" "<<a[right]<<endl;
    53             binarySearch2(a,mid+1,right,num);
    54             
    55         }
    56         else if(num<a[mid]){
    57             //cout<<"left:"<<a[left]<<" "<<a[mid-1]<<endl;
    58             binarySearch2(a,left,mid-1,num);    
    59         }
    60     }
    61     else{
    62         return false;
    63     } 
    64 } 
    65 
    66 
    67 //二分查找递推
    68 bool binarySearch3(int a[],int left,int right,int num){//初始left=0,right=length-1 
    69     while(left<=right){
    70         int mid=(left+right)/2;
    71         if(num==a[mid]) return true;
    72         else if(num>a[mid]) left=mid+1;
    73         else if(num<a[mid]) right=mid-1;
    74     } 
    75     return false;
    76 } 
    77 
    78 int main(){
    79     int a[11]={1,2,4,7,8,9,11,15,17,19,20};
    80     //bool b=binarySearch1(a,0,10,20);
    81     //bool b=binarySearch2(a,0,10,7);
    82     bool b=binarySearch3(a,0,10,20);
    83     cout<<b<<endl;
    84     return 0;
    85 } 

     

  • 相关阅读:
    linux:centOs7换源阿里云
    nginx:负载均衡实战(一)
    linux-安装jdk以及tomcat
    nginx:在linux上进行nginx的安装
    开源 免费 java CMS
    使用PHP获取汉字的拼音(全部与首字母)
    php版获取重定向后地址的代码分享
    php获取数组中重复数据的两种方法
    php删除html标签的三种解决方法
    php curl 伪造IP来源的代码分享
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7041005.html
Copyright © 2011-2022 走看看