Итак, я возился с операторами ||
и &&
с return
. Я пришел к выводу, сравнивая int
, например, return 1 || 0;
return 0 || 0;
, что программа возвращает 1
или 0
в случае функции int
и истину или ложь в случае bool
функций после сравнения values.
Теперь я писал код для нахождения суммы пути к заданному значению с использованием реализации деревьев.
bool HasPathSum(ds::sn::BNode<int>* root, int value)
{
if (!root && !value)
{
return true;
}
else if(root)
{
return HasPathSum(root->left, value - root->data)
|| HasPathSum(root->right, value - root->data);
}
return false;
}
Мне удалось написать его после массивных возня. Для рекурсии я делал
HasPathSum(root->left, value - root->data);
return HasPathSum(root->right, value - root->data);
, чтобы исследовать все пути, но это было не совсем нормально, потому что, если сумма путей оставалась в левой части, она делала go истинным, но в конечном итоге возвращалось false
. Я подумал, что мне придется написать рекурсивное определение в одной строке, чтобы оно работало, и написал ||
просто в качестве эксперимента, и мне пришло в голову, что это действительно сработало. Я написал std::cout << value << " ";
вверху оператора if
, чтобы увидеть, что происходит, и он делает то, что должен делать, и останавливается, как только путь был найден.
Это все, что я пробовал, но Я не могу понять, как работает рекурсивная функция с ||
или будет работать, если дан &&
.
Если кто-то опытный может дать объяснение! :)