Matemática por trás do método da Raiz Quadrada Babilônica [fechado]

Eu li o método para calcular a raiz quadrada de qualquer número e o algoritmo é o seguinte:

double findSquareRoot(int n) {
    double x = n;
    double y = 1;
    double e = 0.00001;
    while(x-y >= e) {
        x = (x+y)/2;
        y = n/x;
    }
    return x;
}

Minha pergunta sobre esse método é

Como calcula a raiz quadrada? Eu não entendi a matemática por trás disso. Comox=(x+y)/2 and y=n/x converge para a raiz quadrada de n. Explique essa matemática.

Qual é a complexidade desse algoritmo?

questionAnswers(4)

yourAnswerToTheQuestion