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:
{\displaystyle L_{n}:={\begin{cases}2&{\text{if }}n=0;\\1&{\text{if }}n=1;\\L_{n-1}+L_{n-2}&{\text{if }}n>1.\\\end{cases}}}
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
Recursive Solution - O(2^n) Time and O(n) Space
Below is a recursive implementation based on a simple recursive formula.
C++
// Recursive C/C++ program
// to find n'th Lucas number
#include <stdio.h>
// recursive function
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
int main()
{
int n = 9;
printf("%d", lucas(n));
return 0;
}
Java
// 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.
Python
# Python3 program to
# find n'th Lucas number
# recursive function
def 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
n = 9;
print(lucas(n));
# This code is contributed by phasing17
C#
// Recursive C# program to
// find n'th Lucas number
using 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.
JavaScript
<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>
PHP
<?php
// Recursive php 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
$n = 9;
echo lucas($n);
// This code is contributed by ajit.
?>
Output :
76
Iterative Solution - O(n) Time and O(1) Space
The time complexity of the above implementation is exponential. We can optimize it to work in O(n) time using iteration.
C++
// Iterative C/C++ program
// to find n'th Lucas Number
#include <stdio.h>
// Iterative function
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
int main()
{
int n = 9;
printf("%d", lucas(n));
return 0;
}
Java
// Iterative Java program to
// find n'th Lucas Number
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(String args[])
{
int n = 9;
System.out.println(lucas(n));
}
}
// This code is contributed
// by Nikita tiwari.
Python
# Iterative Python 3 program
# to find n'th Lucas Number
# Iterative function
def 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 Code
n = 9
print(lucas(n))
# This code is contributed
# by Nikita tiwari.
C#
// Iterative C# program to
// find n'th Lucas Number
using 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.
JavaScript
<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>
PHP
<?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
?>
Output :
76
References:
https://en.wikipedia.org/wiki/Lucas_number
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem