Pierwiastek z warunkiem epsilonowym [C++]

kolnierz
Użytkownik
Użytkownik
Posty: 46
Rejestracja: 16 paź 2007, o 16:49
Płeć: Mężczyzna
Lokalizacja: Żagań
Podziękował: 3 razy

Pierwiastek z warunkiem epsilonowym [C++]

Post autor: kolnierz »

Witam!
Mam napisać funkcję w c++, która liczy pierwiastek nieujemnej liczby zmiennopozycyjnej a w oparciu
o wzór rekurencyjny:\(\displaystyle{ x _{0}=1,
x _{k+1}= \frac{x _{k}+ \frac{a}{x _{k} } }{2}}\)

przy czym obliczenia sa przerywane, gdy \(\displaystyle{ \left| x _{k} ^{2}-a \right|< Epsilon}\) dla pewnego zadanego epsilon> 0, o którym domyslnie zakłada się, ze wynosi jeden. Oczywiście problem błahy, funkcję napisałem taką:

Kod: Zaznacz cały

              double x, i=1, n=1, epsilon;
               cin>>x>>epsilon;
               while(i<epsilon){
               while( i*i<n*n*x){i=i+1;}
               if(i*i>n*n*x){i=i-1;}
               n=n*10;
               i=i*10;
               }
               cout<<x<<"\t"<< i/n<<endl;
Jednak w treści zadania, które jest dłuższe niż to co tu przytoczyłem jest zaznaczone, że niewolno korzystać z for'ów i while'i. Moje pytanie jest takie jak to zrobić, rekurencyjnie... Z góry dziękuję za pomoc...
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Pierwiastek z warunkiem epsilonowym [C++]

Post autor: kadiii »

Kod: Zaznacz cały

float pierwiastek(float x, float a)
{
  if(abs(pow(x,2)-a)<eps) return x;
  else
  {
    x=(x+a/(float)x)/2.0;
    return pierwiastek(x,a);
  }
}
ODPOWIEDZ