C++ 递归数的平方根 #包括 #包括 使用名称空间std; int e=0.001; 双yk(整数k,双x){ 如果(k==0)返回1; 返回0.5*(yk(k-1,x)+x/yk(k-1,x)); } 双正方形(双x,整数k) { 如果(fabs(yk(k,x)*yk(k,x)-x)

C++ 递归数的平方根 #包括 #包括 使用名称空间std; int e=0.001; 双yk(整数k,双x){ 如果(k==0)返回1; 返回0.5*(yk(k-1,x)+x/yk(k-1,x)); } 双正方形(双x,整数k) { 如果(fabs(yk(k,x)*yk(k,x)-x),c++,newtons-method,C++,Newtons Method,变量e应为浮点或双精度。 您得到的错误不是因为fabs函数,而是因为您试图返回一个指向yk函数的指针,但是square返回一个double #include<iostream> #include<cmath> using namespace std; int e=0.001; double yk(int k,double x){ if(k==0) return 1; return 0.5*(yk(k-1,x) + x/yk(k-1,x)); } doub

变量e应为浮点或双精度。
您得到的错误不是因为fabs函数,而是因为您试图返回一个指向yk函数的指针,但是square返回一个double

#include<iostream>
#include<cmath>
using namespace std;
int e=0.001;
double yk(int k,double x){
    if(k==0) return 1;
    return 0.5*(yk(k-1,x) + x/yk(k-1,x));
}

double square(double x,int k)
{
    if(fabs(yk(k,x)*yk(k,x) - x)<e) return yk;
    return square(x,k+1);    
}
int main()
{    
    cout<<yk(5,2);
    return 0;
}
#包括
#包括
使用名称空间std;
双e=0.001;
双yk(整数k,双x){
如果(k==0)返回1;
返回0.5*(yk(k-1,x)+x/yk(k-1,x));
}
双正方形(双x,整数k)
{
双res=yk(k,x);
if(fabs(res*res-x)你不能在任何地方调用
square
函数,是吗?是的!但是当我调用程序时,不要因为fabs函数而编译..不知道为什么会发生错误和什么错误?cpp | 12 |错误:无法转换
double(*)(int,double)“to
double”作为回报|您认为
return yk;
有什么作用?您已经正确地将
double res=yk(k,x)
添加到函数
square
中,但同样的优化也必须应用到
yk(k-1,x)
表达式的函数
yk
本身。
#include <iostream>
#include <cmath>

using namespace std;
double e=0.001;
double yk(int k,double x){
    if(k==0) return 1;
    return 0.5*(yk(k-1,x) + x/yk(k-1,x));
}

double square(double x,int k)
{
    double res = yk(k, x);
    if (fabs(res*res - x) < e) return res;
    return square(x,k+1);
}

int main()
{
    cout << yk(5,2); // Actually you don't call square....
    // it works even if you do square(2, 5), this way you get the root of two
    // doing at least 5 iterations, and if it is not enough (error > e) the
    // computer goes on until it gets an error < e
    return 0;
}