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

Почему по ретурну не выходит из функции С++ - C++

Восстановить пароль Регистрация
 
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.09.2012, 20:22     Почему по ретурну не выходит из функции С++ #1
Народ помогите, вот функция поиска в дереве узла, делал рекурсивно, так быстрее и удобнее, но появилась проблема, не выходит из функции по ретурну( проверял в дебаге) помогите, что сделал не так.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Tree* Found(Tree* branch,int key)
{
    if (branch->key<key)
        if (branch->right!=0)
            Found(branch->right,key);
        else
            return branch;      
    if (branch->key>key)
        if (branch->left!=0)
            Found(branch->left,key);
        else
            return branch;      
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
18.09.2012, 20:29     Почему по ретурну не выходит из функции С++ #2
Цитата Сообщение от Wolkodav Посмотреть сообщение
Почему по ретурну не выходит из функции С++
Видимо потому, что она рекурсивная.
DrobyshevAlex
1164 / 1114 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
18.09.2012, 20:31     Почему по ретурну не выходит из функции С++ #3
Может вы не понимаете как работает рекурсия?
По ретурну по любому выходит из функции.
Просто функция вызывает саму себя много раз, например вызвалось 10 раз внутри, тогда первый раз ретурн вернёт из 10 функции, второй раз из 9 и так далее...
А вот когда дойдёт до ретурна, той функции которая была вызвана "из вне" вот тогда и будет выход из функции который вы ожидаете
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 20:37     Почему по ретурну не выходит из функции С++ #4
надо сказать что и ретурны пропущены:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Tree* Found(Tree* branch,int key)
{
    if (branch->key<key)
        if (branch->right!=0)
            return Found(branch->right,key); // тут
        else
            return branch;      
    if (branch->key>key)
        if (branch->left!=0)
            return Found(branch->left,key); // тут
        else
            return branch;      
 
 
   // тут тоже что-то нужно вернуть.
 
}
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.09.2012, 20:52  [ТС]     Почему по ретурну не выходит из функции С++ #5
Тьфу блин,
DrobyshevAlex, рекурсию я понимаю.
Тьфу блин точно, забыл ретурны поставить, что-то глаз замылился немного, вот и пропустил, простите дурака, спасибо большое!!!
Yandex
Объявления
18.09.2012, 20:52     Почему по ретурну не выходит из функции С++
Ответ Создать тему
Опции темы

Текущее время: 07:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru