在 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

回到顶部