Lucas Numbers

11 Jul, 2022
Lucas numbers are similar to Fibonacci numbers. Lucas numbers are also defined as the sum of its two immediately previous terms. But here the first two terms are 2 and 1 whereas in Fibonacci numbers the first two terms are 0 and 1 respectively. Mathematically, Lucas Numbers may be defined as:The Lucas numbers are in the following integer sequence:2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123 ..............Write a function int lucas(int n) n as an argument and returns the nth Lucas number.Examples :  
Input : 3
Output : 4

Input : 7
Output : 29
 
Method 1 (Recursive Solution) Below is a recursive implementation based on a simple recursive formula.  
C++
Java
Python3
C#
PHP
Javascript
// Recursive C/C++ program// to find n'th Lucas number#include <stdio.h> // recursive functionint lucas(int n){    // Base cases    if (n == 0)        return 2;    if (n == 1)        return 1;     // recurrence relation    return lucas(n - 1) +        lucas(n - 2);} // Driver Codeint main(){    int n = 9;    printf("%d", lucas(n));    return 0;}
// Recursive Java program to// find n'th Lucas number class GFG{     // recursive function    public static int lucas(int n)    {         // Base cases        if (n == 0)            return 2;        if (n == 1)            return 1;         // recurrence relation        return lucas(n - 1) +               lucas(n - 2);    }     // Driver Code    public static void main(String args[])    {        int n = 9;        System.out.println(lucas(n));    }}// This code is contributed// by Nikita Tiwari.
# Python3 program to# find n'th Lucas number # recursive functiondef lucas(n):       # Base cases    if n == 0:        return 2;    if n == 1:        return 1;       # recurrence relation    return lucas(n - 1) + lucas(n - 2);     # Driver code to test above methodsn = 9;print(lucas(n)); # This code is contributed by phasing17
// Recursive C# program to// find n'th Lucas numberusing System; class GFG {     // recursive function    public static int lucas(int n)    {         // Base cases        if (n == 0)            return 2;        if (n == 1)            return 1;         // recurrence relation        return lucas(n - 1) + lucas(n - 2);    }     // Driver program    public static void Main()    {         int n = 9;         Console.WriteLine(lucas(n));    }} // This code is contributed by vt_m.
<?php// Recursive php program to// find n'th Lucas number // recursive functionfunction lucas($n){     // Base casesif ($n == 0)    return 2;if ($n == 1)    return 1; // recurrence relationreturn lucas($n - 1) +       lucas($n - 2);} // Driver Code$n = 9;echo lucas($n); // This code is contributed by ajit.?>
<script> // Javascript program to// find n'th Lucas number     // recursive function    function lucas(n)    {           // Base cases        if (n == 0)            return 2;        if (n == 1)            return 1;           // recurrence relation        return lucas(n - 1) +               lucas(n - 2);    } // Driver code to test above methods         let n = 9;        document.write(lucas(n));   // This code is contributed by avijitmondal1998.</script>
Output :  
76
Method 2 (Iterative Solution) The time complexity of the above implementation is exponential. We can optimize it to work in O(n) time using iteration.  
C++
Java
Python3
C#
PHP
Javascript
// Iterative C/C++ program// to find n'th Lucas Number#include <stdio.h> // Iterative functionint lucas(int n){    // declaring base values    // for positions 0 and 1    int a = 2, b = 1, c, i;     if (n == 0)        return a;     // generating number    for (i = 2; i <= n; i++)    {        c = a + b;        a = b;        b = c;    }    return b;} // Driver Codeint main(){    int n = 9;    printf("%d", lucas(n));    return 0;}
// Iterative Java program to// find n'th Lucas Numberclass GFG{    // Iterative function    static int lucas(int n)    {        // declaring base values        // for positions 0 and 1        int a = 2, b = 1, c, i;         if (n == 0)            return a;         // generating number        for (i = 2; i <= n; i++)        {            c = a + b;            a = b;            b = c;        }        return b;    }     // Driver Code    public static void main(String args[])    {        int n = 9;        System.out.println(lucas(n));    }} // This code is contributed// by Nikita tiwari.
# Iterative Python 3 program# to find n'th Lucas Number # Iterative functiondef lucas(n) :     # declaring base values    # for positions 0 and 1    a = 2    b = 1         if (n == 0) :        return a      # generating number    for i in range(2, n + 1) :        c = a + b        a = b        b = c         return b       # Driver Coden = 9print(lucas(n)) # This code is contributed# by Nikita tiwari.
// Iterative C# program to// find n'th Lucas Numberusing System; class GFG {     // Iterative function    static int lucas(int n)    {         // declaring base values        // for positions 0 and 1        int a = 2, b = 1, c, i;         if (n == 0)            return a;         // generating number        for (i = 2; i <= n; i++) {            c = a + b;            a = b;            b = c;        }         return b;    }     // Driver Code    public static void Main()    {        int n = 9;         Console.WriteLine(lucas(n));    }} // This code is contributed by vt_m.
<?php// Iterative php program// to find n'th Lucas Number function lucas($n){    // declaring base values    // for positions 0 and 1    $a = 2; $b = 1; $c; $i;     if ($n == 0)        return $a;     // generating number    for ($i = 2; $i <= $n; $i++)    {        $c = $a + $b;        $a = $b;        $b = $c;    }    return $b;} // Driver Code$n = 9;echo lucas($n); // This code is contributed by ajit?>
<script>    // Iterative Javascript program to find n'th Lucas Number         // Iterative function    function lucas(n)    {          // declaring base values        // for positions 0 and 1        let a = 2, b = 1, c, i;          if (n == 0)            return a;          // generating number        for (i = 2; i <= n; i++) {            c = a + b;            a = b;            b = c;        }          return b;    }         let n = 9;        document.write(lucas(n));         </script>
Output :  
76
Time complexity: O(n) since using a for loop
Space complexity: O(1) since using constant variables
References: https://en.wikipedia.org/wiki/Lucas_numberThis article is contributed by Harsh Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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. 
jit_t
nidhi_biet
avijitmondal1998
divyesh072019
polymatir3j
series
Dynamic Programming
Mathematical
Dynamic Programming
Mathematical
series
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.