C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用してペル数を見つける


与えられた問題では、P nを見つけるために必要な整数nが与えられます。 、つまり、その位置のペル数。さて、私たちが知っているように、ペル数はこの式で与えられるシリーズの一部です-P n =2 * P n-1 + P n-2

最初の2つの開始番号-P0 =0およびP1 =1

解決策を見つけるためのアプローチ

次に、再帰的アプローチと反復的アプローチの2つのアプローチでこの問題を解決します。

再帰的アプローチ

この式では、ペル数の式を再帰的に適用し、n回の反復を行います。

#include <iostream>

using namespace std;
int pell(int n) {
   if(n <= 2)
      return n;
   return 2*pell(n-1) + pell(n-2);
}
int main() {
   int n = 6; // given n
   cout << pell(n) <<"\n"; // Pell number at that position.
   return 0;
}

出力

70

上記のコードの説明

このアプローチでは、2までのペル数が指定された数と同じであることがわかっているため、nが2以下になるまでpell(n-1)&&pell(n-2)を呼び出すことによって再帰を使用します。上記のプログラムの全体的な時間計算量はO(N) 、ここで、Nは指定された数です。

反復アプローチ

このアプローチでは、上記と同じ式を使用しますが、再帰関数の代わりにforループを使用して数値を計算します。

#include <iostream>

using namespace std;
int main() {
   int n = 6; // given n.
   int p0 = 0; // initial value of pn-2.
   int p1 = 1; // initial value of pn-1.
   int pn; // our answer.

   if(n <= 2) // if n <= 2 we print n.
      cout << n <<"\n";
   else {
      for(int i = 2; i <= n; i++) { // we are going to find from the second number till n.

         pn = 2*p1 + p0;
         p0 = p1; // pn-1 becomes pn-2 for new i.
         p1 = pn; // pn becomes pn-1 for new i.
      }

      cout << pn << "\n";
   }
   return 0;
}

出力

70

上記のコードの説明

与えられたプログラムでは、2からnまでトラバースし、nに達するまでpn-2からpn-1およびpn-1からpnの値を更新するだけです。

結論

この記事では、再帰と反復を使用してN番目のペル数を見つける問題を解決しました。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチ(通常および効率的)についても学びました。同じプログラムをC、Java、Python、その他の言語などの他の言語で作成できます。


  1. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります

  2. C++を使用してセットの反射関係の数を見つける

    この記事では、集合上の反射関係の数を見つけるためのアプローチについて説明します。この問題では、数nが与えられ、n個の自然数のセットで、反射関係の数を決定する必要があります。 反射関係 −集合Aの関係は、(a、a)が集合Aに属するすべてのaがRに属する場合、反射的と呼ばれます。たとえば、- Input : x = 1 Output : 1 Explanation : set = { 1 }, reflexive relations on A * A : { { 1 } } Input : x = 2 Output : 4 Explanation : set = { 1,2 }, reflex