Возвращаемое значение функции C ++: моя функция настроена на возврат указателя, но ничего не возвращает - PullRequest
0 голосов
/ 04 марта 2020

Итак, я делаю алгоритм с намерением запустить бинарный поиск. Но проблема даже в том, что алгоритм работает внутри функции, мой возврат не работает вообще, возвращаемый результат, который я всегда получаю, равен 0. Вот функция, которая выполняет поиск:

value_type* bsearch( value_type * first, value_type * last, value_type value ){
   value_type* mid;
   mid = (last - first)/2 + first;
   if(first>last){
     std::cout << "first>last" << value << *mid << '\n';
     return nullptr;
   }
   if(*mid==value){
     std::cout << "Found " << mid << " " << *mid << '\n';
     return mid;
   }
   if(*mid>value){
     last = mid - 1;
     std::cout << "*mid>value " << mid << " " << *mid << '\n';
     bsearch(first,last,value);
   }else{
     first = mid + 1;
     std::cout << "*mid<value " << mid << " " << *mid << '\n';
     bsearch(first,last,value);
  }
  return nullptr;
}

А вот функция, которая выполняет функцию bsearch. Результат всегда равен 0, даже когда mid является допустимым указателем, поэтому вывод всегда "Поиск не удался!".

void run_bsearch(){
    value_type A4[]{ 1, 2, 3, 4, 5, 6, 7 };

    std::cout << ">>> A4[ " << print( std::begin(A4), std::end(A4) ) << "]\n";
    for ( auto i(0u) ; i <= (sizeof(A4)/sizeof(A4[0]))+1 ; ++i ){
        std::cout << ">>> Looking for value \'" << i << "\' in A4: ";
        value_type* result = bsearch( std::begin(A4), std::end(A4), i );
        std::cout << "Result: "<<result << "\n";
        if( result == nullptr ){
          std::cout << "Search failed!\n";
        }else{
          std::cout << "Located target element at position " << result - std::begin(A4) << std::endl;
        }
    }
}

Программа работает так:

Here is a print of the program running

1 Ответ

1 голос
/ 04 марта 2020
  if(*mid>value){
     last = mid - 1;
     std::cout << "*mid>value " << mid << " " << *mid << '\n';
     bsearch(first,last,value);
   }else{
     first = mid + 1;
     std::cout << "*mid<value " << mid << " " << *mid << '\n';
     bsearch(first,last,value);
  }

Проблема в том, что вы не возвращаете результат рекурсивной функции bsearch.

...