Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/03/2015, 04:51
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

La idea de búsqueda binaria es dividir una sucesión e ir tomando en consideración porciones cada vez más reducidas (habitualmente dividiendo la sucesión por la mitad), hasta encontrar el elemento buscado.

Pongo mi propuesta, que consiste literalmente en ir buscando aproximaciones sucesivas al valor del radicando, a partir de dos valores iniciales, un límite inferior y otro superior. Estos dos límites pueden ser las raíces enteras próximas a la buscada o cualquier otro valor; la condición es que el primero sea menor y el segundo mayor a la raíz buscada. La serie converge sin demasiada excitación, pero firme.

Aunque esta solución no es muy eficiente, es la que para mí responde con más justeza a los términos del problema.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. // cálculo de raiz cuadrada como búsqueda binaria
  6. double raiz(double n ,double inf ,double sup)
  7. {
  8.     static const double epsilon = 1E-6; // razonablemente 0
  9.                                         // (se puede pedir al usuario)
  10.  
  11.     double m = (inf+sup)/2; // promedio de los límites
  12.     double delta = std::fabs(m*m - n); // aproximación al radicando
  13.  
  14.     if (delta <= epsilon) // el promedio es la raiz
  15.         return m;
  16.  
  17.     if(m*m < n)  // promedio menor que la raiz
  18.         return raiz(n, m, sup); // buscar entre el promedio y sup
  19.  
  20.     // promedio mayor que la raiz
  21.     return raiz(n, inf, m); // busca entre inf y el promedio
  22. }
  23.  
  24. int main()
  25. {
  26.     double raiz_7 = raiz(7, 2, 3); // la raiz de 7 se supone entre 2 y 3
  27.  
  28.     std::cout << std::setprecision(6) << std::fixed;
  29.     std::cout << "raiz cuadrada de 7 = " << raiz_7 << '\n';
  30. }

Por otro lado, sé que no tiene nada que ver con un problema escolar, pero como una especie de respeto básico, no habría que llamar "método de Babilonia" a la fórmula de Herón de Alejandría...

Última edición por lareto; 26/03/2015 a las 05:04