# Program to implement Collatz Conjecture

Given a positive integer n, the task is to find whether this number reaches 1 after performing the following two operations:-

1. If n is even, then n = n/2.
2. If n is odd, then n = 3*n + 1.
3. Repeat the above steps, until it becomes 1.

For example, for n = 12, we get the sequence 12, 6, 3, 10, 5, 16, 8, 4, 2, 1.

Examples:

```Input : n = 4
Output : Yes

Input : n = 5
Output : Yes```

The idea is to simply follow given rules and recursively call the function with reduced values until it reaches 1. If a value is seen again during recursion, then there is a cycle and we can’t reach 1. In this case, we return false.

## C++

 `// C++ program to implement Collatz Conjecture` `#include` `using` `namespace` `std;`   `// Function to find if n reaches to 1 or not.` `bool` `isToOneRec(``int` `n, unordered_set<``int``> &s)` `{` `    ``if` `(n == 1)` `        ``return` `true``;`   `    ``// If there is a cycle formed, we can't r` `    ``// reach 1.` `    ``if` `(s.find(n) != s.end())` `        ``return` `false``;` `     ``s.insert(n);``//inserting elements to the s`   `    ``// If n is odd then pass n = 3n+1 else n = n/2` `    ``return` `(n % 2)? isToOneRec(3*n + 1, s) :` `                    ``isToOneRec(n/2, s);` `}`   `// Wrapper over isToOneRec()` `bool` `isToOne(``int` `n)` `{` `   ``// To store numbers visited using recursive calls.` `   ``unordered_set<``int``> s;`   `   ``return` `isToOneRec(n, s);` `}`   `// Drivers code` `int` `main()` `{` `    ``int` `n = 5;` `    ``isToOne(n) ? cout << ``"Yes"` `: cout <<``"No"``;` `    ``return` `0;` `}`

## Java

 `// Java program to implement Collatz Conjecture` `import` `java.util.*;`   `class` `GFG ` `{`   `    ``// Function to find if n reaches to 1 or not.` `    ``static` `boolean` `isToOneRec(``int` `n, HashSet s) ` `    ``{` `        ``if` `(n == ``1``) ` `        ``{` `            ``return` `true``;` `        ``}`   `        ``// If there is a cycle formed, we can't r` `        ``// reach 1.` `        ``if` `(s.contains(n)) ` `        ``{` `            ``return` `false``;` `        ``}`   `        ``// If n is odd then pass n = 3n+1 else n = n/2` `        ``return` `(n % ``2` `== ``1``) ? isToOneRec(``3` `* n + ``1``, s)` `                ``: isToOneRec(n / ``2``, s);` `    ``}`   `    ``// Wrapper over isToOneRec()` `    ``static` `boolean` `isToOne(``int` `n) ` `    ``{` `        ``// To store numbers visited using recursive calls.` `        ``HashSet s = ``new` `HashSet();`   `        ``return` `isToOneRec(n, s);` `    ``}`   `    ``// Drivers code` `    ``public` `static` `void` `main(String[] args) ` `    ``{` `        ``int` `n = ``5``;` `        ``if` `(isToOne(n)) ` `        ``{` `            ``System.out.print(``"Yes"``);` `        ``} ` `        ``else` `        ``{` `            ``System.out.print(``"No"``);` `        ``}` `    ``}` `}`   `/* This code contributed by PrinciRaj1992 */`

## Python3

 `# Python3 program to implement Collatz Conjecture`   `# Function to find if n reaches to 1 or not.` `def` `isToOneRec(n: ``int``, s: ``set``) ``-``> ``bool``:` `    ``if` `n ``=``=` `1``:` `        ``return` `True`   `    ``# If there is a cycle formed,` `    ``# we can't reach 1.` `    ``if` `n ``in` `s:` `        ``return` `False`   `    ``# If n is odd then pass n = 3n+1 else n = n/2` `    ``if` `n ``%` `2``:` `        ``return` `isToOneRec(``3` `*` `n ``+` `1``, s)` `    ``else``:` `        ``return` `isToOneRec(n ``/``/` `2``, s)`   `# Wrapper over isToOneRec()` `def` `isToOne(n: ``int``) ``-``> ``bool``:`   `    ``# To store numbers visited` `    ``# using recursive calls.` `    ``s ``=` `set``()`   `    ``return` `isToOneRec(n, s)`   `# Driver Code` `if` `__name__ ``=``=` `"__main__"``:` `    ``n ``=` `5` `    ``if` `isToOne(n):` `        ``print``(``"Yes"``)` `    ``else``:` `        ``print``(``"No"``)`   `# This code is contributed by` `# sanjeev2552`

## C#

 `// C# program to implement ` `// Collatz Conjecture` `using` `System; ` `using` `System.Collections.Generic; ` `    `  `class` `GFG ` `{`   `    ``// Function to find if n reaches to 1 or not.` `    ``static` `Boolean isToOneRec(``int` `n, HashSet<``int``> s) ` `    ``{` `        ``if` `(n == 1) ` `        ``{` `            ``return` `true``;` `        ``}`   `        ``// If there is a cycle formed, ` `        ``// we can't reach 1.` `        ``if` `(s.Contains(n)) ` `        ``{` `            ``return` `false``;` `        ``}`   `        ``// If n is odd then pass n = 3n+1 else n = n/2` `        ``return` `(n % 2 == 1) ? isToOneRec(3 * n + 1, s)` `                            ``: isToOneRec(n / 2, s);` `    ``}`   `    ``// Wrapper over isToOneRec()` `    ``static` `Boolean isToOne(``int` `n) ` `    ``{` `        ``// To store numbers visited using ` `        ``// recursive calls.` `        ``HashSet<``int``> s = ``new` `HashSet<``int``>();`   `        ``return` `isToOneRec(n, s);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main(String[] args) ` `    ``{` `        ``int` `n = 5;` `        ``if` `(isToOne(n)) ` `        ``{` `            ``Console.Write(``"Yes"``);` `        ``} ` `        ``else` `        ``{` `            ``Console.Write(``"No"``);` `        ``}` `    ``}` `}`   `// This code contributed by Rajput-Ji`

## Javascript

 ``

Output

`Yes`

The above program is inefficient. The idea is to use Collatz Conjecture. It states that if n is a positive then somehow it will reach 1 after a certain amount of time. So, by using this fact it can be done in O(1) i.e. just check if n is a positive integer or not.
Note that the answer would be false for negative numbers. For negative numbers, the above operations would keep number negative and it would never reach 1.

## C++

 `// C++ program to implement Collatz Conjecture` `#include` `using` `namespace` `std;`   `// Function to find if n reaches to 1 or not.` `bool` `isToOne(``int` `n)` `{` `    ``// Return true if n is positive` `    ``return` `(n > 0);` `}`   `// Drivers code` `int` `main()` `{` `    ``int` `n = 5;` `    ``isToOne(n) ? cout << ``"Yes"` `: cout <<``"No"``;` `    ``return` `0;` `}`

## Java

 `// Java program to implement Collatz` `// Conjecture` `class` `GFG {` `    `  `    ``// Function to find if n reaches` `    ``// to 1 or not.` `    ``static` `boolean` `isToOne(``int` `n)` `    ``{` `        `  `        ``// Return true if n is positive` `        ``return` `(n > ``0``);` `    ``}` `    `  `    ``// Drivers code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `n = ``5``;` `        `  `        ``if``(isToOne(n) == ``true``)` `            ``System.out.println(``"Yes"``);` `        ``else` `            ``System.out.println(``"No"``);` `    ``}` `}`   `// This code is contributed by Smitha.`

## Python 3

 `# Python 3 program to implement` `# Collatz Conjecture`   `# Function to find if n ` `# reaches to 1 or not.` `def` `isToOne(n):`   `    ``# Return true if n` `    ``# is positive` `    ``return` `(n > ``0``)`   `# Drivers code` `n ``=` `5`   `if` `isToOne(n) ``=``=` `True``:` `    ``print``(``"Yes"``)` `else``:` `    ``print``(``"No"``)` `    `  `# This code is contributed` `# by Smitha.`

## C#

 `// C# program to implement` `// Collatz Conjecture` `using` `System;`   `class` `GFG {` `    `  `    ``// Function to find if n` `    ``// reaches to 1 or not.` `    ``static` `bool` `isToOne(``int` `n)` `    ``{` `        `  `        ``// Return true if n ` `        ``// is positive` `        ``return` `(n > 0);` `    ``}` `    `  `    ``// Drivers code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `n = 5;` `        `  `        ``if``(isToOne(n) == ``true``)` `            ``Console.Write(``"Yes"``) ;` `        ``else` `            ``Console.Write(``"No"``);` `    ``}` `}`   `// This code is contributed` `// by Smitha.`

## Javascript

 ``

## PHP

 ` 0)` `        ``return` `true;` `    ``return` `false;` `}`   `// Driver code` `\$n` `= 5;` `isToOne(``\$n``)? ``print``(``"Yes"``) : ``print``(``"No"``);`   `// This code is contributed by princiraj1992` `?>`

Output

`Yes`

Time complexity: O(1)
Auxiliary space: O(1)

We strongly recommend to refer below problem as an exercise:
Maximum Collatz sequence length
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.