Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pavlikzlo
0 / 0 / 0
Регистрация: 09.08.2014
Сообщений: 3
#1

Рекурсивный спуск - Функция не останавливается на "else return" - C++

09.08.2014, 12:54. Просмотров 397. Ответов 5
Метки нет (Все метки)

не могу понять, почему функция не останавливается на "else return *(a+mid);"
делал отладку, после этого return'a происходит еще два вызова? и в итоге возвращает -1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using namespace std;
#include <iostream>
 
 
int search ( int *a, int nel, int k )
{
    int mid = 0, high = nel - 1, low = 0;
    
        mid = ( low + high )/2;
    
        cout << "My number is:" << *( a + mid ) << endl;
    
        if (*(a + mid) > k)
        
            search (a, high - mid, k);
        
        else
            if (*(a + mid) < k)
 
                search ( a + mid + 1, high - mid, k);
            
            else return *(a + mid);
    
    
    
    return -1;
}
 
 
 
 
int main () {
    
    int *array = new int;
    int el, size;
    
    cout << "Put size of your array:" << endl;
    cin >> size;
    cout << "Now put your first element:" << endl;
    cin >> el;
    
    for (int i = 0 ; i < size ; i++ )
    {
        *(array + i ) = el++;
        cout << *(array + i)<< " ";
    }
    cout << endl;
    cout << search ( array, size, 9);
    
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2014, 12:54     Рекурсивный спуск - Функция не останавливается на "else return"
Посмотрите здесь:

рекурсивный спуск - C++
Подскажите книгу где описано рекурсивный спуск!

Рекурсивный спуск - C++
нужно реализовать рекурсивный спуск буквально за час, буду оч признателен. Нужно найти ошибку в синтаксисе и помочь с семантикой, либо...

Рекурсивный спуск для грамматики - C++
Добрый день. Необходимо написать нисходящий разбор методом рекурсивного спуска для сложения вещественных чисел. У меня есть код,...

Вывести "return 0" если введенное значение равно -1 - C++
Вывести return 0 если в вводе есть -1 ,но есть одно но. я ввожу 3 элемента так while(cin&gt;&gt;time&gt;mission&gt;&gt;status) и вот такой тест 3 E...

С аргументами программа вылетает на последней команде "return 0;". Без аргументов - нет - C++
С аргументами программа вылетает на последней команде &quot;return 0;&quot;. Без аргументов - нет. При запуске её из командного файла прекращается...

Ошибка завершения программы после "return 0" - C++
stdafx.h #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; #include &quot;Student.h&quot; Student.h ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Справлюсь
23 / 23 / 5
Регистрация: 24.07.2014
Сообщений: 203
09.08.2014, 13:21     Рекурсивный спуск - Функция не останавливается на "else return" #2
Можите подробней объяснить что выполняет функция search()?
И вот еще, вы не правильно объявляете массив у вас:
C++
1
int *array = new int;
то есть память выделяется под один элемент,а нужно
C++
1
int *array = new int[size];
, для этого сперва пользователь вводит зачение size а потом инициализируется массив.
pavlikzlo
0 / 0 / 0
Регистрация: 09.08.2014
Сообщений: 3
09.08.2014, 14:31  [ТС]     Рекурсивный спуск - Функция не останавливается на "else return" #3
За ошибку спасибо )
а функция search это поиск нужного элемента, делением пополам в упорядоченном массиве ( по другому логорифмический поиск вроде ). Берется медиана массива -> сравнивается с искомым элементом, далее в зависимости от сравнения рассматривается левая или правая часть массива, где опять таки находится медиана и так до победного.
salam
162 / 143 / 12
Регистрация: 10.07.2012
Сообщений: 725
09.08.2014, 17:08     Рекурсивный спуск - Функция не останавливается на "else return" #4
только пишется это все нерекурсивно.

Добавлено через 5 минут
если вы пишете рекурсивно, то явно не хватает параметров в функции. хотелось бы
C++
1
search(массив, левая_граница_поиска, правая_граница_поиска, искомый элемент)
и условие выхода из рекурсии - такое же, как и в нерекурсивном бинпоиске - http://www.cyberforum.ru/cgi-bin/latex.cgi?(left \ == \ right \ - \ 1)

Добавлено через 1 минуту
советую узнать, что такое "левый" бинпоиск и что такое "правый" - бывает полезно.
pavlikzlo
0 / 0 / 0
Регистрация: 09.08.2014
Сообщений: 3
10.08.2014, 01:51  [ТС]     Рекурсивный спуск - Функция не останавливается на "else return" #5
Спасибо, но вопрос был совсем в другом, почему в моей функции не происходит выход, хотя по отладке он проходит через этот шаг.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 07:14     Рекурсивный спуск - Функция не останавливается на "else return"
Еще ссылки по теме:

Ошибка в функции main: "expected ';' before 'return'" - C++
сегодня решил начать изучение с++ сразу наткнулся на проблемы,чуть ли не в каждой строчке,гуглил ошибки и находил решение в основном на...

рекурсивный алгоритм и использование точности "Эпсилон" - C++
Нихао всем) Тут такое дело. Нужно построить рекурсивный алгоритм, который бы возводил число &quot;е&quot; (экспоненту) в степень. Степень должна...

предлагаю людям класс "рекурсивный обход матрицы" для решения задач на такую тематику - C++
Друзья! Ввиду возникшей необходимости мной был написан класс &quot;рекурсивный обход матрицы&quot;; Теперь задачи на такую тематику будут решаться...

мужики , какая функция отвечает за "глюк" раб.стола? - C++
скинул себе программу &quot;прикол&quot;, а там есть такая менюшка глюк экрана, поле установки которой текст становится неразборчив. ну вот как...

Функция PTinqpoint() и ошибка "Использована неинициализированная локальная переменная" - C++
Добрый день, возникает проблема с реализацией функции. Документация по ней: PTinqpoint int32 PTinqpoint(char * filename, char...

Как исправить ошибку "Функция в качестве левого операнда"? - C++
Пытаюсь запустить программу, но возникает ошибка: Функция в качестве левого операнда. Ссылается на строки с установлением цены. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
salam
162 / 143 / 12
Регистрация: 10.07.2012
Сообщений: 725
10.08.2014, 07:14     Рекурсивный спуск - Функция не останавливается на "else return" #6
Цитата Сообщение от salam Посмотреть сообщение
если вы пишете рекурсивно, то явно не хватает параметров в функции.
я намекнул, что программа, скорее всего, не может работать правильно. дебажить надо программу после того, как устранили очевидные логические ошибки.
Yandex
Объявления
10.08.2014, 07:14     Рекурсивный спуск - Функция не останавливается на "else return"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru