# Golomb sequence

In mathematics, the Golomb sequence is a non-decreasing integer sequence where n-th term is equal to number of times n appears in the sequence.
The first few values are
1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, ……

Explanation of few terms:
Third term is 2, note that three appears 2 times.
Second term is 2, note that two appears 2 times.
Fourth term is 3, note that four appears 3 times.
Given a positive integer n. The task is to find the first n terms of Golomb sequence.

Examples:

```Input : n = 4
Output : 1 2 2 3

Input : n = 6
Output : 1 2 2 3 3 4```

The recurrence relation to find the nth term of Golomb sequence:
a(1) = 1
a(n + 1) = 1 + a(n + 1 – a(a(n)))

Below is the implementation using Recursion:

## C++

 `// C++ Program to find first` `// n terms of Golomb sequence.` `#include ` `using` `namespace` `std;`   `// Return the nth element` `// of Golomb sequence` `int` `findGolomb(``int` `n)` `{` `    ``// base case` `    ``if` `(n == 1)` `        ``return` `1;`   `    ``// Recursive Step` `    ``return` `1 + findGolomb(n - ` `               ``findGolomb(findGolomb(n - 1)));` `}`   `// Print the first n ` `// term of Golomb Sequence` `void` `printGolomb(``int` `n)` `{` `    ``// Finding first n ` `    ``// terms of Golomb Sequence.` `    ``for` `(``int` `i = 1; i <= n; i++) ` `        ``cout << findGolomb(i) << ``" "``; ` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `n = 9;` `    ``printGolomb(n);` `    ``return` `0;` `}`

## Java

 `// Java Program to find first  ` `// n terms of Golomb sequence.` `import` `java.util.*;`   `class` `GFG` `{` `    ``public` `static` `int` `findGolomb(``int` `n)` `    ``{` `        `  `        ``// base case` `        ``if` `(n == ``1``)` `            ``return` `1``;` `    `  `        ``// Recursive Step` `        ``return` `1` `+ findGolomb(n - ` `        ``findGolomb(findGolomb(n - ``1``)));` `    ``}` `    `  `    `  `    ``// Print the first n term of ` `    ``// Golomb Sequence ` `    ``public` `static` `void` `printGolomb(``int` `n)` `    ``{` `        `  `        ``// Finding first n terms of ` `        ``// Golomb Sequence.` `        ``for` `(``int` `i = ``1``; i <= n; i++) ` `            ``System.out.print(findGolomb(i) + ` `                                       ``" "``); ` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `main (String[] args)` `    ``{` `        ``int` `n = ``9``;` `        `  `        ``printGolomb(n);` `    ``}` `}`   `// This code is contributed by Akash Singh`

## Python3

 `# Python 3 Program to find first ` `# n terms of Golomb sequence.`   `# Return the nth element of ` `# Golomb sequence` `def` `findGolomb(n):`   `    ``# base case` `    ``if` `(n ``=``=` `1``):` `        ``return` `1`   `    ``# Recursive Step` `    ``return` `1` `+` `findGolomb(n ``-` `    ``findGolomb(findGolomb(n ``-` `1``)))`     `# Print the first n term ` `# of Golomb Sequence` `def` `printGolomb(n):`   `    ``# Finding first n terms of` `    ``# Golomb Sequence.` `    ``for` `i ``in` `range``(``1``, n ``+` `1``): ` `        ``print``(findGolomb(i), end``=``" "``) `   `# Driver Code` `n ``=` `9`   `printGolomb(n)`   `# This code is contributed by ` `# Smitha Dinesh Semwal`

## C#

 `// C# Program to find first n  ` `// terms of Golomb sequence.` `using` `System;`   `class` `GFG ` `{` `    `  `    ``// Return the nth element ` `    ``// of Golomb sequence` `    ``static` `int` `findGolomb(``int` `n)` `    ``{` `        `  `        ``// base case` `        ``if` `(n == 1)` `            ``return` `1;` `    `  `        ``// Recursive Step` `        ``return` `1 + findGolomb(n - ` `        ``findGolomb(findGolomb(n - 1)));` `    ``}` `    `  `    ``// Print the first n term  ` `    ``// of Golomb Sequence` `    ``static` `void` `printGolomb(``int` `n)` `    ``{` `        ``// Finding first n terms of ` `        ``// Golomb Sequence.` `        ``for` `(``int` `i = 1; i <= n; i++) ` `            ``Console .Write(findGolomb(i) + ` `                                     ``" "``); ` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `Main ()` `    ``{` `        `  `        ``int` `n = 9;` `        `  `        ``printGolomb(n);` `        `  `    ``}` `}`   `// This code is contributed by vt_m`

## PHP

 ``

## Javascript

 ``

Output :

`1 2 2 3 3 4 4 4 5`

Below is the implementation using Dynamic Programming:

## C++

 `// C++ Program to find first` `// n terms of Golomb sequence.` `#include ` `using` `namespace` `std;`   `// Print the first n term ` `// of Golomb Sequence` `void` `printGolomb(``int` `n)` `{` `    ``int` `dp[n + 1];`   `    ``// base cases` `    ``dp[1] = 1;` `    ``cout << dp[1] << ``" "``;`   `    ``// Finding and printing first ` `    ``// n terms of Golomb Sequence.` `    ``for` `(``int` `i = 2; i <= n; i++) ` `    ``{` `        ``dp[i] = 1 + dp[i - dp[dp[i - 1]]];` `        ``cout << dp[i] << ``" "``;` `    ``}` `}` `// Driver Code` `int` `main()` `{` `    ``int` `n = 9;`   `    ``printGolomb(n);` `    ``return` `0;` `}`

## Java

 `// Java Program to find first ` `// n terms of Golomb sequence.` `import` `java.util.*;`   `class` `GFG ` `{` `    `  `    ``public` `static` `void` `printGolomb(``int` `n)` `    ``{` `        ``int` `dp[] = ``new` `int``[n + ``1``];` `    `  `        ``// base cases` `        ``dp[``1``] = ``1``;` `        ``System.out.print(dp[``1``] + ``" "``);` `    `  `        ``// Finding and printing first n ` `        ``// terms of Golomb Sequence.` `        ``for` `(``int` `i = ``2``; i <= n; i++) ` `        ``{` `            ``dp[i] = ``1` `+ dp[i - dp[dp[i - ``1``]]];` `            `  `        ``System.out.print(dp[i] + ``" "``);` `        ``}` `    ``}` `        `  `    ``// Driver code` `    ``public` `static` `void` `main (String[] args)` `    ``{` `        ``int` `n = ``9``; ` `        `  `        ``printGolomb(n);` `    ``}` `}`   `// This code is contributed by Akash Singh`

## Python3

 `# Python3 Program to find first ` `# n terms of Golomb sequence. `   `# Print the first n term ` `# of Golomb Sequence ` `def` `Golomb( n): `   `    ``dp ``=` `[``0``] ``*` `(n ``+` `1``)`   `    ``# base cases ` `    ``dp[``1``] ``=` `1` `    ``print``(dp[``1``], end ``=` `" "` `) `   `    ``# Finding and print first ` `    ``# n terms of Golomb Sequence.` `    ``for` `i ``in` `range``(``2``, n ``+` `1``): ` `    `  `        ``dp[i] ``=` `1` `+` `dp[i ``-` `dp[dp[i ``-` `1``]]] ` `        ``print``(dp[i], end ``=` `" "``) ` `    `  `# Driver Code ` `n ``=` `9`   `Golomb(n)`   `# This code is contributed by ash264`

## C#

 `// C# Program to find first n ` `// terms of Golomb sequence.` `using` `System;`   `class` `GFG ` `{` `    `  `    ``// Print the first n term of ` `    ``// Golomb Sequence` `    ``static` `void` `printGolomb(``int` `n)` `    ``{` `        ``int` `[]dp = ``new` `int``[n + 1];` `    `  `        ``// base cases` `        ``dp[1] = 1;` `        ``Console.Write(dp[1] + ``" "``);` `    `  `        ``// Finding and printing first n ` `        ``// terms of Golomb Sequence.` `        ``for` `(``int` `i = 2; i <= n; i++)` `        ``{` `            ``dp[i] = 1 + dp[i - dp[dp[i - 1]]];` `            ``Console.Write( dp[i] + ``" "``);` `        ``}` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `Main ()` `    ``{` `        `  `        ``int` `n = 9;` `        `  `        ``printGolomb(n);` `    ``}` `}`   `// This code is contributed by vt_m`

## PHP

 ``

## Javascript

 ``

Output :

`1 2 2 3 3 4 4 4 5`

Time Complexity: O(n)

Auxiliary Space: O(n)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next