✔ 最佳答案
#include<iostream>
using namespace std;
auto abs(auto a) {return (a>=0) ? (a) : (-a);}
auto clo(auto a, auto b, auto err){
return (abs(a*a-b) <= err) ? a : clo((a+b/a)/2, b, err);
}
int main(void){
float n;
double err;
for(; cout << "give me the N and err: "
&& cin >> n >> err
&& n > 1.0
;){
cout << "SQRT(" << n << ")=" << clo(n,n,err) << endl;
}
return 0;
}
1. 這可以不用遞迴 就可以做出來的.但是因為你是在練習遞迴 就不跟你說 簡易迴圈的做法了
2. 2分逼近 就是一個基本觀念:<根號一定是在a與(b/a)的中間>.你的城市看不出來你對這一點的認知.
CPP$ vim sqrt.cpp
CPP$ g++ sqrt.cpp -o sqrt -Wall -O3 -std=c++14
CPP$ ./sqrt
give me the N and err: 5 0.0001
SQRT(5)=2.23607
give me the N and err: 5 0.1
SQRT(5)=2.2381
give me the N and err: 7 0.1
SQRT(7)=2.65489
give me the N and err: