Я создал три функции, которые предполагают, чтобы вычислить этот полином:Ошибка рекурсивной функции или слишком сложно вычислить?
(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]))))))))))
Это первая функция вычисляет этот многочлен, используя hardcored значения
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;
}
Эта Третья функция вычисляет это значение p olynomial рекурсивно
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;
}
Проблема в том, что первые две функции возвращают один и тот же результат, но третья функция заставляет компилятор тайм-аут. Я размышлял о логике, но я просто не могу понять. Я не знаю, есть ли ошибка, или просто требуется слишком много времени для вычисления, но если вы видите ошибку, можете ли вы помочь мне решить ее. Большое спасибо!
«заставляет компилятор тайм-аут.» Я думаю, что ты не имел в виду, что. – Rishav
@RishavKundu я должен исправить себя язь дал „Ограничение по времени превышен“ предупреждение –
ли вы, возможно, хотите '||', а не '' '? –