我已经创建了三个函数来计算这个多项式:
(c[0]+T*(c[1]+T*(c[2]+T*(c[3]+T*(c[4]+T*(c[5]+T*(c[6]+T*(c[7]+T*(c[8]+T*(c[9]))))))))))
此第一个函数使用硬编码值计算此多项式
double poly(double Temp)
{
double T = Temp;
double p = (c[0]+T*(c[1]+T*(c[2]+T*(c[3]+T*(c[4]+T*(c[5]+T*(c[6]+T*(c[7]+T*(c[8]+T*(c[9]))))))))))
return p;
}
这个第二个函数迭代地计算这个多项式
double poly2(double Temp)
{
double T = Temp;
double p = 1;
for(int i = 9; i >= 0; i--)
{
if(i < 9)
{
p*= T;
p+=c[i];
}
else
{
p*=c[9];
}
}
return p;
}
此第三函数递归计算此多项式
double poly3(double Temp, int i, double p)
{
double T = Temp;
double p1 = p;
if(i == 9)
{
p1*=c[9];
poly3(Temp,i-1, p1);
}
else if(i < 9 | i > 0){
p1*=T;
p1+=c[i];
poly3(Temp,i-1, p1);
}
else if(i == 0)
{
p1*=T;
p1+=c[0];
return p1;
}
}
MAIN
int main() {
cout << std::setprecision(15) << poly(15) << endl;
cout << std::setprecision(15) << poly2(15) << endl;
cout << std::setprecision(15) << poly3(15, 9, 1) << endl;
return 0;
}
问题是前两个函数返回完全相同的结果,但第三个函数导致编译器超时。我一直在思考逻辑,但我无法弄明白。我不知道是否有错误或计算时间太长但如果您看到错误,请帮我解决。非常感谢你!
答案 0 :(得分:2)
几个问题:
如果您想测试数字是否介于两个值之间,则需要和进行比较,而不是或。
逻辑运算符为||
和&&
。
执行递归调用时,您没有返回任何内容。您需要将该调用的结果与当前值组合。
double poly3(double Temp, int i, double p)
{
double T = Temp;
double p1 = p;
if(i == 9)
{
p1*=c[9];
return poly3(Temp,i-1, p1);
}
else if(i < 9 && i > 0){
p1*=T;
p1+=c[i];
return poly3(Temp,i-1, p1);
}
else if(i == 0)
{
p1*=T;
p1+=c[0];
return p1;
}
}