已知:两个真实的 a,b(a〈b) 和一个正整数
- n*.使用牛顿-莱布尼茨公式计算定积分:a(top) ∫ b(bottom) (f(x,n)dx = F(b,n)-F(a,n)其中F(x,n)是一阶 (原导数、反导数、原函数、原积分) 函数f(x,n):F(x, n) = integral(f(x,n)dx)
以两种方式实现F(x,n)的计算:
1.作为递归。
1.非递归函数。
这就是需要解决的问题,点击链接打开照片
F(x,n) = ∫(ctg^n*xdx)
我用 pow 函数解了这道题,老师让我不用 pow 函数解这道题,帮我不用 pow 函数解。
递归解
// Recursion
double F(double x, int n)
{
if (n == 0)
return x;
else if (n == 1)
return log(fabs(sin(x)));
else
return -pow(cos(x) / sin(x), n - 1) / (n - 1) - F(x, n - 2);
}
使用循环求解
// For loop
double F_for(double x, int n)
{
if (n == 0)
return x;
else if (n == 1)
return log(fabs(sin(x)));
else
{
double F1 = x;
double F2 = log(fabs(sin(x)));
double res = 0.0;
for (int i = 2; i <= n; i++)
{
res = -pow(cos(x) / sin(x), i - 1) / (i - 1) - F1;
F1 = F2;
F2 = res;
}
return res;
}
}
主函数
int main()
{
double a, b;
cout << "Enter a: ";
cin >> a;
cout << "Enter b: ";
cin >> b;
int n;
cout << "Enter n: ";
cin >> n;
cout << "Recursion: " << F(b, n) - F(a, n) << std::endl;
cout << "A loop: " << F_for(b, n) - F_for(a, n);
return 0;
}
请帮我解决这个问题,不要使用pow函数,我已经写了我的函数“my_power”。
我的指导员说:“你不能使用幂函数,无论是标准的(pow)还是你自己的(power),原因是任何使用这样的函数都会导致循环,而你的循环,或者标准函数中的循环,都是细节,递归函数本身就是循环;使用可变增量会导致循环--效率不高。”
double power(double x, int y)
{
double temp;
if (y == 0)
return 1;
temp = power(x, y / 2);
if ((y % 2) == 0) {
return temp * temp;
}
else {
if (y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
I also tested this function
void test_my_power()
{
cout << "pow" << pow(2, -3) << "0" << endl;
cout << "power" << power(2, -3) << "0" << endl;
cout << endl;
cout << "pow" << pow(0, -3) << "0" << endl;
cout << "power" << power(0, -3) << "0" << endl;
cout << endl;
cout << "pow" << pow(0, 1) << "0" << endl;
cout << "power" << power(0, 1) << "0" << endl;
cout << endl;
cout << "pow" << pow(0, -1) << "0" << endl;
cout << "power" << power(0, -1) << "0" << endl;
cout << endl;
cout << "pow" << pow(8, 4) << "0" << endl;
cout << "power" << power(8, 4) << "0" << endl;
cout << endl;
cout << "pow" << pow(11, 3) << "0" << endl;
cout << "power" << power(11, 3) << "0" << endl;
cout << endl;
cout << "pow" << pow(5, 6) << "0" << endl;
cout << "power" << power(5, 6) << "0" << endl;
cout << endl;
}
1条答案
按热度按时间2fjabf4q1#
您的老师可能希望您在迭代循环时动态计算
pow
。此代码:
相当于:
并且不使用
pow
。