描述 | |
根据级数运算,一个数的平方根能用如下公式表示: sqrt(a) = lim f(n) n->∞ 其中,f(n) 是一个递推函数,其递推式如下:f(n+1)= 0.5*(f(n)+a/f(n)) 显然,迭代的次数越多,求出的值就越精确。 对于一个给定的实数 a,请用上述方法求出它的平方根。 要求前后两次迭代出的 f(n) 的差的绝对值小于等于 1E-5 方可终止 | |
关于输入 | |
一个正实数a | |
关于输出 | |
一个正实数,它的值是a的平方根,要求精确到小数点后7位 | |
例子输入 | |
4 | |
例子输出 | |
2.0000000 | |
提示 | |
请使用double类型,迭代的初始条件可以选择f(0)=1 |
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
const double eps = 1e-5;
double f(int n, double a)//求出递归函数的值
{
if (n == 0)return 1;
return 0.5 * (f(n - 1, a) + a / f(n - 1, a));
}
int main()
{
double a;
int n = 1;
double result = 0;
cin >> a;
while (fabs(f(n, a) - f(n - 1, a)) > eps)
{
++n;
}
result = f(n, a);
printf("%lf", result);
return 0;
}