使用C++查詢佩爾數


在給定問題中,我們得到一個整數n,我們需要找到Pn,即該位置的佩爾數。眾所周知,佩爾數是一個由以下公式給出的序列的一部分:−Pn = 2*Pn-1 + Pn-2

前兩個起始數字為:− P0 = 0 和 P1 = 1

求解方法

現在我們將透過兩種方法解決這個問題:遞迴和迭代。

遞迴方法

在這個公式中,我們將遞迴地應用佩爾數的公式並進行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

以上程式碼的解釋

在這種方法中,我們透過呼叫pell(n-1) && pell(n-2) 來使用遞迴,直到n小於或等於2,因為我們知道直到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,並簡單地更新pn-2到pn-1和pn-1到pn的值,直到我們到達n。

結論

在本文中,我們使用遞迴和迭代解決了查詢第N個佩爾數的問題。我們還學習了這個問題的C++程式以及我們解決這個問題的完整方法(常規和高效)。我們可以在其他語言(例如C、Java、Python和其他語言)中編寫相同的程式。

更新於:2021年11月26日

468 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.