#include <iostream>
using namespace std;
double raiz_cuadrada(double numero,double aproximacion, int n); //Nuestra función de raiz cuadrada
double raiz_cuadrada(double numero); //Nuestra función creada únicamente para iniciar la llamada
int main()
{
int numero=0;
cout<<"Ingrese un numero";
cin>>numero;
double num = raiz_cuadrada(numero);
cout<<"La raiz cuadrada de "<<numero<<" es: "<<raiz_cuadrada(numero);
//Solo para que el programa no termine
}
double raiz_cuadrada(double numero)
{
//Función creada, unicamente para inicar nuestro proceso, el numero inicial no importa, así que iniciamos en uno
//y colocamos el contador a cero
return raiz_cuadrada(numero,1,0);
}
double raiz_cuadrada(double numero,double aproximacion, int n)
{
//Guardamos la aproximación anterior
double aproximacionantes = aproximacion;
//Utilizando la formula de Newton-Raphson
aproximacion = aproximacion - (((aproximacion * aproximacion) - numero ) / ( 2 * aproximacion));
//Verificas que la aproximación haya cambiado, y cuidamos nuestro contador, para que la recursión no se trabe
if(aproximacion == aproximacionantes || n > 50)
return aproximacion; //Regresas la aproximación en caso de que el numero no cambie
//Llamada recursiva para calcular una nueva aproximación
return raiz_cuadrada(numero,aproximacion,++n);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIHJhaXpfY3VhZHJhZGEoZG91YmxlIG51bWVybyxkb3VibGUgYXByb3hpbWFjaW9uLCBpbnQgbik7IC8vTnVlc3RyYSBmdW5jacOzbiBkZSByYWl6IGN1YWRyYWRhCmRvdWJsZSByYWl6X2N1YWRyYWRhKGRvdWJsZSBudW1lcm8pOyAvL051ZXN0cmEgZnVuY2nDs24gY3JlYWRhIMO6bmljYW1lbnRlIHBhcmEgaW5pY2lhciBsYSBsbGFtYWRhCgppbnQgbWFpbigpCnsKICAgIGludCBudW1lcm89MDsKICAgIGNvdXQ8PCJJbmdyZXNlIHVuIG51bWVybyI7CiAgICBjaW4+Pm51bWVybzsKICAgIGRvdWJsZSBudW0gPSByYWl6X2N1YWRyYWRhKG51bWVybyk7CiAgICBjb3V0PDwiTGEgcmFpeiBjdWFkcmFkYSBkZSAiPDxudW1lcm88PCIgZXM6ICI8PHJhaXpfY3VhZHJhZGEobnVtZXJvKTsKLy9Tb2xvIHBhcmEgcXVlIGVsIHByb2dyYW1hIG5vIHRlcm1pbmUKfQoKZG91YmxlIHJhaXpfY3VhZHJhZGEoZG91YmxlIG51bWVybykKewovL0Z1bmNpw7NuIGNyZWFkYSwgdW5pY2FtZW50ZSBwYXJhIGluaWNhciBudWVzdHJvIHByb2Nlc28sIGVsIG51bWVybyBpbmljaWFsIG5vIGltcG9ydGEsIGFzw60gcXVlIGluaWNpYW1vcyBlbiB1bm8KLy95IGNvbG9jYW1vcyBlbCBjb250YWRvciBhIGNlcm8KcmV0dXJuIHJhaXpfY3VhZHJhZGEobnVtZXJvLDEsMCk7Cgp9Cgpkb3VibGUgcmFpel9jdWFkcmFkYShkb3VibGUgbnVtZXJvLGRvdWJsZSBhcHJveGltYWNpb24sIGludCBuKQp7Ci8vR3VhcmRhbW9zIGxhIGFwcm94aW1hY2nDs24gYW50ZXJpb3IKZG91YmxlIGFwcm94aW1hY2lvbmFudGVzID0gYXByb3hpbWFjaW9uOwoKLy9VdGlsaXphbmRvIGxhIGZvcm11bGEgZGUgTmV3dG9uLVJhcGhzb24KYXByb3hpbWFjaW9uID0gYXByb3hpbWFjaW9uIC0gKCgoYXByb3hpbWFjaW9uICogYXByb3hpbWFjaW9uKSAtIG51bWVybyApIC8gKCAyICogYXByb3hpbWFjaW9uKSk7CgovL1ZlcmlmaWNhcyBxdWUgbGEgYXByb3hpbWFjacOzbiBoYXlhIGNhbWJpYWRvLCB5IGN1aWRhbW9zIG51ZXN0cm8gY29udGFkb3IsIHBhcmEgcXVlIGxhIHJlY3Vyc2nDs24gbm8gc2UgdHJhYmUKaWYoYXByb3hpbWFjaW9uID09IGFwcm94aW1hY2lvbmFudGVzIHx8IG4gPiA1MCkKcmV0dXJuIGFwcm94aW1hY2lvbjsgLy9SZWdyZXNhcyBsYSBhcHJveGltYWNpw7NuIGVuIGNhc28gZGUgcXVlIGVsIG51bWVybyBubyBjYW1iaWUKCi8vTGxhbWFkYSByZWN1cnNpdmEgcGFyYSBjYWxjdWxhciB1bmEgbnVldmEgYXByb3hpbWFjacOzbgpyZXR1cm4gcmFpel9jdWFkcmFkYShudW1lcm8sYXByb3hpbWFjaW9uLCsrbik7Cn0K