es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamadas de función recursiva en C++

¿Cuál es la diferencia entre:

return(checkBst(root->left, minvalue, root) && checkBst(root->right, root, maxvalue));

y

return(checkBst(root->left, minvalue, root));
return(checkBst(root->right, root, maxvalue));

Mi programa completo se ve así:

bool checkBst(node *root, node * minvalue, node * maxvalue){
    if(root == NULL){
        return true;
    }
    if((minvalue && root->data <= minvalue->data) || (maxvalue && root->data >= maxvalue->data)){
        return false;
    }
    return(checkBst(root->left, minvalue, root) && checkBst(root->right, root, maxvalue));
    // return(checkBst(root->left, minvalue, root));
    // return(checkBst(root->right, root, maxvalue));
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    La diferencia entre los dos es que el primero combina las dos llamadas recursivas utilizando el operador lógico “&&” para verificar si ambos subárboles izquierdo y derecho son BST válidos en una sola línea, mientras que el segundo separa las dos llamadas en dos líneas.

    En el primer caso, ambas llamadas recursivas se ejecutarán y sus resultados se unirán lógicamente antes de ser devueltos. Si alguna llamada devuelve false, toda la expresión se evaluará como false y la función devolverá false inmediatamente, sin continuar recorriendo el resto del árbol. Esto puede ahorrar tiempo potencialmente si el subárbol izquierdo no pasa la verificación BST, ya que el subárbol derecho no se explorará más en este caso.

    En el segundo caso, la función devolverá el resultado de la primera llamada recursiva y terminará esa rama del árbol. La segunda llamada recursiva no se ejecutará en este caso. Lo mismo ocurre con la tercera sentencia de retorno más adelante en el código.

    En general, la primera versión es más eficiente ya que puede ahorrar algunas llamadas recursivas y mejorar el rendimiento.

Comments are closed.