מספר גל

מספר גל
נסה את זה ב-GfG Practice #practiceLinkDiv { display: none !חשוב; }

מספרי Pell הם מספרים הדומים למספרי פיבונאצ'י ומופקים על ידי הנוסחה שלהלן כדלקמן: 

P n  = 2*P n-1  + P n-2  with seeds P 0  = 0 and P 1  = 1 

מספרי ה-Pell הראשונים הם 0 1 2 5 12 29 70 169 408 985 2378 5741 13860 33461 .... כתוב פונקציה int pell(int n) שמחזירה P נ .

דוגמאות:  

Input : n = 4 Output :12 
Input : n = 7 Output : 169 
Recommended Practice מספר גל נסה את זה!

שיטה 1 (שימוש ברקורסיה)   

C++
   // Pell Number Series using Recursion in C++   #include          using     namespace     std  ;   // calculate nth pell number   int     pell  (  int     n  )   {      if     (  n      <=     2  )      return     n  ;      return     2     *     pell  (  n     -     1  )     +     pell  (  n     -     2  );   }   // Driver Code   int     main  ()   {      int     n     =     4  ;      cout      < <     ' '      < <     pell  (  n  );      return     0  ;   }   // This code is contributed by shivanisinghss2110   
C
   // Pell Number Series using Recursion in C   #include         // calculate nth pell number   int     pell  (  int     n  )   {      if     (  n      <=     2  )      return     n  ;      return     2     *     pell  (  n     -     1  )     +     pell  (  n     -     2  );   }   // driver function   int     main  ()   {      int     n     =     4  ;      printf  (  '%d'       pell  (  n  ));      return     0  ;   }   
Java
   // Pell Number Series using Recursion in JAVA   class   PellNumber     {      // calculate n-th Pell number      public     static     int     pell  (  int     n  )      {      if     (  n      <=     2  )      return     n  ;      return     2     *     pell  (  n     -     1  )     +     pell  (  n     -     2  );      }      // driver function      public     static     void     main  (  String     args  []  )      {      int     n     =     4  ;      System  .  out  .  println  (  pell  (  n  ));      }   }   
Python3
   # Pell Number Series using    # Recursion in Python3   # Calculate nth pell number   def   pell  (  n  )   :   if   (  n    <=   2  )   :   return   n   return   (  2   *   pell  (  n   -   1  )   +   pell  (  n   -   2  ))   # Driver function   n   =   4  ;   print  (  pell  (  n  ))   # This code is contributed by Nikita Tiwari.   
C#
   // Pell Number Series using Recursion in C#   using     System  ;   class     PellNumber     {      // calculate n-th Pell number      public     static     int     pell  (  int     n  )      {      if     (  n      <=     2  )      return     n  ;      return     2     *     pell  (  n     -     1  )     +     pell  (  n     -     2  );      }      // Driver function      public     static     void     Main  ()      {      int     n     =     4  ;      Console  .  Write  (  pell  (  n  ));      }   }   // This code is contributed by vt_m.   
PHP
      // Pell Number Series using   // Recursion in PHP   // calculate nth pell number   function   pell  (  $n  )   {   if   (  $n    <=   2  )   return   $n  ;   return   2   *   pell  (  $n   -   1  )   +   pell  (  $n   -   2  );   }   // Driver Code   $n   =   4  ;   echo  (  pell  (  $n  ));   // This code is contributed by Ajit.   ?>   
JavaScript
    <  script  >   // Pell Number Series using   // Recursion in Javascript   // calculate nth pell number   function     pell  (  n  )   {      if     (  n      <=     2  )      return     n  ;      return     2     *     pell  (  n     -     1  )     +      pell  (  n     -     2  );   }   // Driver Code   let     n     =     4  ;   document  .  write  (  pell  (  n  ));   // This code is contributed by _saurabh_jaiswal.    <  /script>   

תְפוּקָה
 12 

מורכבות זמן: O(2 נ ) כלומר מורכבות זמן אקספוננציאלית.

מרחב עזר: עַל)

שיטה 2 (איטרטיבית)  

C++
   // Iterative Pell Number Series in C++   #include          using     namespace     std  ;   // Calculate nth pell number   int     pell  (  int     n  )   {      if     (  n      <=     2  )      return     n  ;      int     a     =     1  ;      int     b     =     2  ;      int     c       i  ;      for     (  i     =     3  ;     i      <=     n  ;     i  ++  )     {      c     =     2     *     b     +     a  ;      a     =     b  ;      b     =     c  ;      }      return     b  ;   }   // Driver Code   int     main  ()   {      int     n     =     4  ;      cout      < <     pell  (  n  );      return     0  ;   }   // This code is contributed by nidhi_biet   
C
   // Iterative Pell Number Series in C   #include         // calculate nth pell number   int     pell  (  int     n  )   {      if     (  n      <=     2  )      return     n  ;      int     a     =     1  ;      int     b     =     2  ;      int     c       i  ;      for     (  i     =     3  ;     i      <=     n  ;     i  ++  )     {      c     =     2     *     b     +     a  ;      a     =     b  ;      b     =     c  ;      }      return     b  ;   }   // driver function   int     main  ()   {      int     n     =     4  ;      printf  (  '%d'       pell  (  n  ));      return     0  ;   }   
Java
   // Iterative Pell Number Series in Java   class   PellNumber     {      // calculate nth pell number      public     static     int     pell  (  int     n  )      {      if     (  n      <=     2  )      return     n  ;      int     a     =     1  ;      int     b     =     2  ;      int     c  ;      for     (  int     i     =     3  ;     i      <=     n  ;     i  ++  )     {      c     =     2     *     b     +     a  ;      a     =     b  ;      b     =     c  ;      }      return     b  ;      }          // driver function      public     static     void     main  (  String     args  []  )      {      int     n     =     4  ;      System  .  out  .  println  (  pell  (  n  ));      }   }   
Python
   # Iterative Pell Number    # Series in Python 3   # calculate nth pell number   def   pell  (  n  )   :   if   (  n    <=   2  )   :   return   n   a   =   1   b   =   2   for   i   in   range  (  3     n  +  1  )   :   c   =   2   *   b   +   a   a   =   b   b   =   c   return   b   # driver function   n   =   4   print  (  pell  (  n  ))   # This code is contributed by Nikita Tiwari.   
C#
   // Iterative Pell Number Series in C#   using     System  ;   class     PellNumber     {      // calculate nth pell number      public     static     int     pell  (  int     n  )      {      if     (  n      <=     2  )      return     n  ;      int     a     =     1  ;      int     b     =     2  ;      int     c  ;      for     (  int     i     =     3  ;     i      <=     n  ;     i  ++  )     {      c     =     2     *     b     +     a  ;      a     =     b  ;      b     =     c  ;      }      return     b  ;      }          // Driver function      public     static     void     Main  ()      {      int     n     =     4  ;      Console  .  Write  (  pell  (  n  ));      }   }   // This code is contributed by vt_m.    
PHP
      // Iterative Pell Number Series in PHP   // calculate nth pell number   function   pell  (  $n  )   {   if   (  $n    <=   2  )   return   $n  ;   $a   =   1  ;   $b   =   2  ;   $c  ;   $i  ;   for   (  $i   =   3  ;   $i    <=   $n  ;   $i  ++  )   {   $c   =   2   *   $b   +   $a  ;   $a   =   $b  ;   $b   =   $c  ;   }   return   $b  ;   }   // Driver Code   $n   =   4  ;   echo  (  pell  (  $n  ));   // This code is contributed by Ajit.   ?>   
JavaScript
    <  script  >      // Iterative Pell Number Series in Javascript          // calculate nth pell number      function     pell  (  n  )      {      if     (  n      <=     2  )      return     n  ;      let     a     =     1  ;      let     b     =     2  ;      let     c  ;      for     (  let     i     =     3  ;     i      <=     n  ;     i  ++  )     {      c     =     2     *     b     +     a  ;      a     =     b  ;      b     =     c  ;      }      return     b  ;      }          let     n     =     4  ;      document  .  write  (  pell  (  n  ));        <  /script>   

תְפוּקָה:  

12 

מורכבות זמן: O(n) 

מרחב עזר: O(1)

שימוש בחישוב מטריצה

זה עוד O(n) המסתמך על העובדה שאם נכפיל n פעמים את המטריצה ​​M = {{2 1} {1 0}} לעצמה (במילים אחרות חשב כוח(M n)) אז נקבל את מספר ה-Pell (n+1) כאלמנט בשורה ובעמודה (0 0) במטריצה ​​המתקבלת.

M^n=begin{bmatrix} P_{n+1} &P_n \ P_n &P_{n-1} end{bmatrix}      

כאשר M=begin{bmatrix} 2 &1 \ 1 &0 end{bmatrix}      

מורכבות זמן: O(log n) מכיוון שאנו יכולים לחשב חזק n של מטריצה ​​2 × 2 בפעמי O(log n)

צור חידון