Curso 2023/2024
Esto son ejemplos de errores cometidos por estudiantes. Piensa qué es lo que está mal.
int busquedaBinariaRecursiva(const vector<int> & v, int dato, int inicio, int fin) { if (inicio <= fin) { int medio = (inicio + fin) / 2; if (v[medio] < dato) busquedaBinariaRecursiva(v, dato, medio + 1, fin); else if (v[medio] > dato) busquedaBinariaRecursiva(v, dato, inicio, medio - 1); else return medio; } return -1; } int busquedaBinariaRecursiva(const vector<int> & v, int dato) { busquedaBinariaRecursiva(v, dato, 0, v.size() - 1); }
Falta siempre return
para devolver el resultado de las llamadas
recursivas.
int busquedaBinariaRecursiva(const vector<int> & v, int dato, int inicio, int fin) { if (inicio <= fin) { int medio = (inicio + fin) / 2; if (v[medio] < dato) return busquedaBinariaRecursiva(v, dato, medio + 1, fin); else if (v[medio] > dato) return busquedaBinariaRecursiva(v, dato, inicio, medio - 1); else return medio; } return -1; } int busquedaBinariaRecursiva(const vector<int> & v, int dato) { busquedaBinariaRecursiva(v, dato, 0, v.size() - 1); }
Falta un return
.
int busquedaBinariaRecursiva(const vector<int> & v, int dato, int inicio, int fin) { int medio = (inicio + fin) / 2; if (v[medio] < dato) return busquedaBinariaRecursiva(v, dato, medio + 1, fin); else if (v[medio] > dato) return busquedaBinariaRecursiva(v, dato, inicio, medio - 1); else return medio; return -1; } int busquedaBinariaRecursiva(const vector<int> & v, int dato) { return busquedaBinariaRecursiva(v, dato, 0, v.size() - 1); }
Esta solución es incorrecta, porque return -1
así es inalcanzable.
int busquedaBinariaRecursiva(const vector<int> & v, int dato, int inicio, int fin) { if (inicio <= fin) { int medio = (inicio + fin) / 2; if (v[medio] < dato) return busquedaBinariaRecursiva(v, dato, medio + 1, fin); else if (v[medio] > dato) return busquedaBinariaRecursiva(v, dato, inicio, medio - 1); else return medio; } return -1; } int busquedaBinariaRecursiva(const vector<int> & v, int dato) { return busquedaBinariaRecursiva(v, dato, 0, v.size()); }
Esta solución es incorrecta, porque donde debe poner v.size() -
1
pone v.size()
.
int busquedaBinariaRecursiva(const vector<int> & v, int dato, int inicio, int fin) { if (inicio <= fin) { int medio = (inicio + fin) / 2; if (v[medio] < dato) return busquedaBinariaRecursiva(v, dato, medio, fin); else if (v[medio] > dato) return busquedaBinariaRecursiva(v, dato, inicio, medio); else return medio; } return -1; } int busquedaBinariaRecursiva(const vector<int> & v, int dato) { return busquedaBinariaRecursiva(v, dato, 0, v.size() - 1); }
Esta solución es incorrecta, porque donde debe poner medio +
1
o medio -1
pone medio
.