在 C++ 中查找第 n 个 Hermite 数
在这个问题中,我们得到一个整数值 N。我们的任务是创建一个程序来查找第 n 个 Hermite 数。
Hermite Number is a number 是当有 0 个参数时Hermite number 的值。
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 项。
程序来说明我们的解决方案的工作,
示例
#include <iostream>输出结果using 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 "<<N<<"th hermite Number is "<<calcNHermiteNumber(N);
return 0;
}
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 <iostream>输出结果#include <math.h>
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 "<<N<<"th hermite Number is "<<calcNHermiteNumber(N);
return 0;
}
The 10th hermite Number is -30240
以上是 在 C++ 中查找第 n 个 Hermite 数 的全部内容, 来源链接: utcz.com/z/345825.html