在 C++ 中查找第 n 个 Hermite 数!
在这个问题中,我们得到一个整数值N。我们的任务是创建一个程序来查找第n个Hermite数。
HermiteNumberisanumber是当有0个参数时Hermitenumber的值。
Nth hermite Number is HN = (-2) * (N - 1) * H(N-2) The base values are H0 = 1 and H0 = 0.
Hermite序列是−1,0,-2,0,12,0,-120,0,1680,0…。
让我们举个例子来理解这个问题,
输入
N = 7输出结果
0
输入
N = 6输出结果
-120
解决方法
该问题的一个简单解决方案是使用埃尔米特数的公式。这是使用递归完成的,我们可以找到第N项。
程序来说明我们的解决方案的工作,
示例
#includeusing namespace std; int calcNHermiteNumber(int N) { if (N == 0) return 1; if (N % 2 == 1) return 0; else return -2 * (N - 1) * calcNHermiteNumber(N - 2); } int main() { int N = 10; cout<<"The "< 输出结果 The 10th hermite Number is -30240有效的方法
解决问题的有效方法是使用公式。我们可以使用递归公式推导出通用公式。
这里,如果N的值为奇数,则厄米特数为0。
如果N的值是偶数,它们将是公式定义的某个值,
HN = ( (-1)(N/2)) * ( 2(N/2) ) * (N-1)!!(N-1)!!是半阶乘,计算公式为(n-1)*(n-3)*...3*1。
程序来说明我们的解决方案的工作,
示例
#include#include using namespace std; int calcSemiFact(int n) { int factVal = 1; for (int i = 1; i <= n; i = i + 2) { factVal *= i; } return factVal; } int calcNHermiteNumber(int n) { if (n % 2 == 1) return 0; int HermiteNumber = (pow(2, n / 2)) * calcSemiFact(n - 1); if ((n / 2) % 2 == 1) HermiteNumber *= -1; return HermiteNumber; } int main() { int N = 10; cout<<"The "< 输出结果 The 10th hermite Number is -30240