Related Articles
Pell Number
• Difficulty Level : Easy
• Last Updated : 01 Jul, 2020

Pell numbers are numbers that are similar to the Fibonacci numbers and are generated by below formula

Pn = 2*Pn-1 + Pn-2
with seeds P0 = 0 and P1 = 1


First few Pell numbers are 0, 1, 2, 5, 12, 29, 70, 169, 408, 985, 2378, 5741, 13860, 33461, ….

Write a function int pell(int n) that returns Pn.

Examples:

Input : n = 4
Output :12

Input  : n = 7
Output : 169


## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1 (Using Recursion)

## C++

 // Pell Number Series using Recursion in C++#include using namespace std;  // calculate nth pell numberint pell(int n){    if (n <= 2)        return n;    return 2 * pell(n - 1) + pell(n - 2);}  // Driver Codeint 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 numberint pell(int n){    if (n <= 2)        return n;    return 2 * pell(n - 1) + pell(n - 2);}  // driver functionint main(){    int n = 4;    printf("%d", pell(n));    return 0;}

## Java

 // Pell Number Series using Recursion in JAVAclass 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 numberdef pell(n) :    if (n <= 2) :        return n    return (2 * pell(n - 1) + pell(n - 2))      # Driver functionn = 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

 

Output :
12


Method 2 (Iterative)

## C++

 // Iterative Pell Number Series in C++#include using namespace std;  // Calculate nth pell numberint 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 Codeint 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 numberint 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 functionint main(){    int n = 4;    printf("%d", pell(n));    return 0;}

## Java

 // Iterative Pell Number Series in Javaclass 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 numberdef 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 functionn = 4print(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

 

Output:
12


Time Complexity: O(n)
Extra Space: O(1)

Using matrix calculation:
This another O(n) which relies on the fact that if we n times multiply the matrix M = {{2, 1}, {1, 0}} to itself (in other words calculate power(M, n )), then we get the (n+1)th Pell number as the element at row and column (0, 0) in the resultant matrix.  Time Complexity : Since we can compute n-th power of a 2 x 2 matrix in O(log n) time, time complexity of this solution is O(log n)

This article is contributed by Pavan Gopal Rayapati. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up