4

Я создал метод bool contains(string) для хеш-таблицы связанного списка, которая проверяет, находится ли значение в хэше. Я использую вспомогательную функцию для рекурсии, но когда вспомогательная функция возвращает false, bool contains(string) по-прежнему возвращает true. Я провел его через отладчик, и я ясно вижу, что он возвращает false, и я не уверен, почему.Метод Bool возвращает неправильное значение

Вот текущий узел разыскивается:

"laccoliths"->"morbiferous"->"oculi"->"unscabbarded"

значение Я ищу это "typung".

Вот код:

bool contains_h(string x, node * p) //helper method 
{ 
    if (p == NULL) 
     return false; 
    else if (x == p->data) 
     return true; 
    else 
     contains_h(x, p->next); 
} 

bool contains(string word) { return contains_h(word, head); }

+2

Включение предупреждений компилятора (и их чтение) предотвратило бы эту ошибку. – emlai

ответ

7

Nice простой. Вы забыли поставить «возвращение» на последнее слово:

bool contains_h(string x, node * p) //helper method 
{ 
    if (p == NULL) 
     return false; 
    else if (x == p->data) 
     return true; 
    else 
     return contains_h(x, p->next); 
} 


И из любопытства, я переписал код на однострочник, чтобы увидеть, что это будет выглядеть так:

bool contains_h(string x, node * p) //helper method 
{ 
    return ((p!=NULL) && (x == p->data || contains_h(x, p->next))); 
} 

Лично я бы предпочел прочитать ваши шесть строк. Однако другие могут не согласиться, особенно потому, что избежали бы проблемы с отсутствующим возвратом.

Смежные вопросы