第6关:递归求P函数
本关任务:编写函数 funP,完成数学函数P(n,x)函数的计算,定义如下:
相关知识
递归是一个很常见的数学概念,很多数学函数本身就是递归的,例如著名的斐波拉契数列:
a a a
同样可以用递归函数计算斐波拉契数列第 n 项:
// 递归函数fib:计算斐波拉契数列第 n 项并返回
int fib(int n)
{
// 递归终止,直接返回
if(n == 1 || n == 2)
return 1;
// 两次递归调用,求和并返回
return fib(n - 1) + fib(n - 2);
}
编程要求
在右侧编辑器中的Begin-End
之间补充代码,要求使用递归求数学函数 P 函数的功能。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:12 2.34
预期输出:P(12, 2.34)=5.1583
测试输入:9 9.8
预期输出:P(9, 9.8)=25.8949
#include <iostream>
using namespace std;
// 函数funP:实现数学函数P函数
// 返回值:返回P(n,x)的值
double funP(int n, double x)
{
// 请在这里补充代码,实现递归函数funP
/********** Begin *********/
if(n==0)
return 1;
else if(n==1)
return x;
else{
return ((2*n-1)*funP(n-1,x) - (n-1)*funP(n-2,x))/n;
}
/********** End **********/
}
int main()
{
int n;
double x;
cin >> n >> x; // 输入n、x
cout << "P("<<n<<", "<<x<<")=" << funP(n,x) << endl;
return 0;
}