2015-01-25 8 views
-1

Я пытался выяснить, почему моя рекурсивная функция не возвращает никаких чисел. vi - vector<int> и x в исходном вызове функции пуст. Все остальное не имеет значения (работает правильно). Что должно произойти: c возвращается в x и возвращается x. Функция работает нормально, если она ничего не возвращает и нажимает c s в глобальный вектор.Рекурсивная функция, не добавляющая числа

vi generate(const vvi &paths, int index, int start, int end_, int c, vi x) 
{ 
    if (start == end_) 
    { 
     x.push_back(c); 
     return x; 
    } 



    for(auto path : paths) 
    { 
     if(path[0] == start) 
     { 
      x = generate(paths, index, path[1], end_, path[index] + c, x); 
     } 

    } 
    return x; 

} 

Пример:

paths представляет собой вектор вектора целых чисел. Здесь структура визуализируется

{{1, 2, 1, 0}, 
{2, 3, 1, 0}, 
{1, 3, 1, 0}} 

Called с generate(paths, 2, 1, 3, 0, x). Начало и конец: 1 и 3. C начинается с 0. x - пустой вектор int.

Ожидаемое (уточнить, что-то не пустой, порядок не имеет значения):

{1, 2} 

Первый номер от пути 1 до 3, второй номер от пути 1 до 2 и пути 2 до 3.

+1

Просьба указать пример вызова с ожидаемым выходом. – Barry

+0

Ваше редактирование не является примером вызова с ожидаемым выходом. – Barry

+0

Ваш ожидаемый результат зависит полностью от входа функции, которую вы не используете. –

ответ

0

Вы оцениваете стоимость x. Попробуйте передать его по ссылке: vi &x. У вас также есть ошибка (ы) в вашей программе. Если start не равно end_, вы не записываете «ход».

+0

Не нужно ли возвращать значение и ссылаться на то же самое? – qwr

+0

Хмммм, да, но все же это очень много копий. Вы должны сбросить возвращаемое значение и просто использовать ссылку. –

+0

Я нашел проблему. Я вызывал 'generate', но не сохранял вектор. Вот почему прохождение по ссылке сработало. – qwr