Dragon Curve Sequence is an infinite binary sequence of 0’s and 1’s. The first term of the sequence is 1.
From the next term, we alternately insert 1 and 0 between each element of the previous term.
To understand better refer the following explanations:
- 1 (starts with 1)
- “1” 1 “0”
1 and 0 are inserted alternately to the left and right of the previous term. Here the number in the double quotes represents the newly added elements.
So the second term becomes
1 1 0- “1” 1 “0” 1 “1” 0 “0”
So the third term becomes
1 1 0 1 1 0 0
- “1” 1 “0” 1 “1” 0 “0” 1 “1” 1 “0” 0 “1” 0 “0”
The fourth term becomes
1 1 0 1 1 0 0 1 1 1 0 0 1 0 0
This is also popularly known as the regular paperfolding sequence. Given a natural number n, the task is to find the nth string formed by Dragon Curve sequence of length
Examples:
Input: n = 4 Output: 110110011100100 Explanation: We get 1 as the first term, "110" as the second term, "1101100" as the third term , And hence our fourth term will be "110110011100100" Input: n = 3 Output: 1101100
Approach:
- Step 1: Start with the first term 1. Then add 1 and 0 alternately after each element of the preceding term.
- Step 2: The new term obtained becomes the current term.
- Step 3: Repeat the process in a loop from 1 to n, to generate each term and finally the nth term.
Algorithm :
- Step 1: Take the input size n
- Step 2: Initialize 1st term of string as “1”.
- step 3: generate each term of the sequence using nested for loop.
- Step 4: Add alternate 0 and 1 in between, if previous term is 1 then add 0; vice versa.
- Step 5: Print the output string.
Below is the implementation of above idea:
C++
// CPP code to find nth term // of the Dragon Curve Sequence #include <bits/stdc++.h> using namespace std;
// function to generate the nth term string Dragon_Curve_Sequence( int n)
{ // first term
string s = "1" ;
// generating each term of the sequence
for ( int i = 2; i <= n; i++)
{
string temp = "1" ;
char prev = '1' , zero = '0' , one = '1' ;
// loop to generate the ith term
for ( int j = 0; j < s.length(); j++)
{
// add character from the
// original string
temp += s[j];
// add alternate 0 and 1 in between
if (prev == '0' )
{
// if previous added term
// was '0' then add '1'
temp += one;
// now current term becomes
// previous term
prev = one;
}
else
{
// if previous added term
// was '1', then add '0'
temp += zero;
// now current term becomes
// previous term
prev = zero;
}
}
// s becomes the ith term of the sequence
s = temp;
}
return s;
} // Driver program int main()
{ // Taking inputs
int n = 4;
// generate nth term of dragon curve sequence
string s = Dragon_Curve_Sequence(n);
// Printing output
cout << s << "\n" ;
} |
Java
// Java code to find nth term // of the Dragon Curve Sequence import java.util.*;
class solution
{ // function to generate the nth term static String Dragon_Curve_Sequence( int n)
{ // first term
String s = "1" ;
// generating each term of the sequence
for ( int i = 2 ; i <= n; i++)
{
String temp = "1" ;
char prev = '1' , zero = '0' , one = '1' ;
// loop to generate the ith term
for ( int j = 0 ; j < s.length(); j++)
{
// add character from the
// original string
temp += s.charAt(j);
// add alternate 0 and 1 in between
if (prev == '0' )
{
// if previous added term
// was '0' then add '1'
temp += one;
// now current term becomes
// previous term
prev = one;
}
else
{
// if previous added term
// was '1', then add '0'
temp += zero;
// now current term becomes
// previous term
prev = zero;
}
}
// s becomes the ith term of the sequence
s = temp;
}
return s;
} // Driver program public static void main(String args[])
{ // Taking inputs
int n = 4 ;
// generate nth term of dragon curve sequence
String s = Dragon_Curve_Sequence(n);
// Printing output
System.out.println(s);
} } //This code is contributed by //Surendra_Gangwar |
Python
# Python code to find nth term # of the Dragon Curve Sequence # function to generate # the nth term def Dragon_Curve_Sequence(n):
# first term
s = "1"
# generating each term
# of the sequence
for i in range ( 2 , n + 1 ):
temp = "1"
prev = '1'
zero = '0'
one = '1'
# loop to generate the ith term
for j in range ( len (s)):
# add character from the
# original string
temp + = s[j]
# add alternate 0 and
# 1 in between
if (prev = = '0' ):
# if previous added term
# was '0' then add '1'
temp + = one
# now current term becomes
# previous term
prev = one
else :
# if previous added term
# was '1', then add '0'
temp + = zero
# now current term becomes
# previous term
prev = zero
# s becomes the ith term
# of the sequence
s = temp
return s
# Driver Code n = 4
# generate nth term of # dragon curve sequence s = Dragon_Curve_Sequence(n)
# Printing output print (s)
# This code is contributed by # Sanjit_Prasad |
C#
// C# code to find nth term // of the Dragon Curve Sequence using System;
class GFG
{ // function to generate the nth term static String Dragon_Curve_Sequence( int n)
{ // first term
String s = "1" ;
// generating each term of the sequence
for ( int i = 2; i <= n; i++)
{
String temp = "1" ;
char prev = '1' , zero = '0' , one = '1' ;
// loop to generate the ith term
for ( int j = 0; j < s.Length; j++)
{
// add character from the
// original string
temp += s[j];
// add alternate 0 and 1 in between
if (prev == '0' )
{
// if previous added term
// was '0' then add '1'
temp += one;
// now current term becomes
// previous term
prev = one;
}
else
{
// if previous added term
// was '1', then add '0'
temp += zero;
// now current term becomes
// previous term
prev = zero;
}
}
// s becomes the ith term of the sequence
s = temp;
}
return s;
} // Driver Code public static void Main()
{ // Taking inputs
int n = 4;
// generate nth term of dragon
// curve sequence
String s = Dragon_Curve_Sequence(n);
// Printing output
Console.WriteLine(s);
} } // This code is contributed by Rajput-Ji |
PHP
<?php // PHP code to find nth term // of the Dragon Curve Sequence // function to generate the nth term function Dragon_Curve_Sequence( $n )
{ // first term
$s = "1" ;
// generating each term of the sequence
for ( $i = 2; $i <= $n ; $i ++)
{
$temp = "1" ;
$prev = '1' ;
$zero = '0' ;
$one = '1' ;
// loop to generate the ith term
for ( $j = 0; $j < strlen ( $s ); $j ++)
{
// add character from the
// original string
$temp .= $s [ $j ];
// add alternate 0 and 1 in between
if ( $prev == '0' )
{
// if previous added term
// was '0' then add '1'
$temp .= $one ;
// now current term becomes
// previous term
$prev = $one ;
}
else
{
// if previous added term
// was '1', then add '0'
$temp .= $zero ;
// now current term becomes
// previous term
$prev = $zero ;
}
}
// s becomes the ith term of the sequence
$s = $temp ;
}
return $s ;
} // Driver code // Taking inputs
$n = 4;
// generate nth term of dragon curve sequence
$s = Dragon_Curve_Sequence( $n );
// Printing output
echo $s . "\n" ;
// This code is contributed by mits ?> |
Javascript
<script> // Javascript code to find nth term // of the Dragon Curve Sequence // function to generate the nth term function Dragon_Curve_Sequence(n)
{ // first term
let s = "1" ;
// generating each term of the sequence
for (let i = 2; i <= n; i++)
{
let temp = "1" ;
let prev = '1' ;
let zero = '0' ;
let one = '1' ;
// loop to generate the ith term
for (let j = 0; j < s.length; j++)
{
// add character from the
// original string
temp = temp + s[j];
// add alternate 0 and 1 in between
if (prev == '0' )
{
// if previous added term
// was '0' then add '1'
temp += one;
// now current term becomes
// previous term
prev = one;
}
else
{
// if previous added term
// was '1', then add '0'
temp += zero;
// now current term becomes
// previous term
prev = zero;
}
}
// s becomes the ith term of the sequence
s = temp;
}
return s;
} // Driver code // Taking inputs
let n = 4;
// generate nth term of dragon curve sequence
let s = Dragon_Curve_Sequence(n);
// Printing output
document.write(s + "<br>" );
// This code is contributed by gfgking </script> |
Output:
110110011100100
Complexity Analysis:
- Time Complexity: O(n*s) where s is the length of resultant string
- Auxiliary Space: O(s) where s is the length of resultant string