题目:
/*
递归实现牛顿法求整数平方根(原理:
给一个初始值(比如X1 = a/2)迭代求a的平方根,设定一个误差限,不断逼近a
X1 = a/2
X2 = (X1+a/X1)/2
…
…
…
Xn+1 = (Xn+a/Xn)/2)
*/
代码部分:
我这里使用的是c++,感觉做算法题还是使用C++比较好
#include<iostream>
using namespace std;
double getsqrt(double x,double a){
if(x*x-a<0.00001){ //此时说明这个平方根的值在误差内
return x;
}else{ //超出误差要继续分
return getsqrt((x+a/x)/2,a);
}
}
int main(){
int a;
cin>>a;
double b=(int)a;
double x=b/2;
cout<<a<<"的平方根为:"<<getsqrt(x,b)<<endl;
return 0;
}
代码截图
这里是java实现:
public class GetSqrt {
public double getsqrt(double x,double a){
if(x*x-a<0.00001){ //此时说明这个平方根的值在误差内
return x;
}else{ //超出误差要继续分
return getsqrt((x+a/x)/2,a);
}
}
public static void main(String[] args) {
int a;
System.out.print("输入想要算的数:");
Scanner sc = new Scanner(System.in);
a=sc.nextInt();
double b=(int)a;
double x=b/2;
GetSqrt gs = new GetSqrt();
System.out.println(a+"的平方根为:"+gs.getsqrt(x, b));
}
}