# Hailstone Numbers

We are provided with a number N. Our task is to generate all the Hailstone Numbers from N and find the number of steps taken by N to reduce to 1.
Collatz Conjecture: A problem posed by L. Collatz in 1937, also called the 3x+1 mapping, 3n+1 problem. Let N be a integer. According to Collatz conjecture, if we keep iterating N as following

N = N / 2 // For Even N
and N = 3 * (N-1) + 1 // For Odd N

Our number will eventually converge to 1 irrespective of the choice of N.

Hailstone Numbers: The sequence of integers generated by Collatz conjecture are called Hailstone Numbers.

Examples:

```Input : N = 7
Output :
Hailstone Numbers: 7, 22, 11, 34, 17,
52, 26, 13, 40, 20,
10, 5, 16, 8, 4, 2,
1
No. of steps Required: 17

Input : N = 9
Output :
Hailstone Numbers: 9, 28, 14, 7, 22, 11,
34, 17, 52, 26, 13,
40, 20, 10, 5, 16, 8,
4, 2, 1
No. of steps Required: 20

In the first example, N = 7.
The numbers will be calculated as follows:
7
3 * 7 + 1 = 22     // Since 7 is odd.
22 / 2 = 11        // 22 is even.
3 * 11 + 1 = 34    // 11 is odd.
.... and so on upto 1.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is simple, we recursively print numbers until we reach base case.

## C++

 `// C++ program to generate hailstone  ` `// numbers and calculate steps required  ` `// to reduce them to 1 ` `#include ` `using` `namespace` `std; ` ` `  `// function to print hailstone numbers ` `// and to calculate the number of steps  ` `// required ` `int` `HailstoneNumbers(``int` `N) ` `{ ` `    ``static` `int` `c; ` ` `  `    ``cout << N << ``" "``; ` ` `  `    ``if` `(N == 1 && c == 0) { ` ` `  `        ``// N is initially 1. ` `        ``return` `c; ` `    ``}  ` `    ``else` `if` `(N == 1 && c != 0) { ` ` `  `        ``// N is reduced to 1. ` `        ``c++; ` `        ``return` `c; ` `    ``}  ` `    ``else` `if` `(N % 2 == 0) { ` ` `  `        ``// If N is Even. ` `        ``c++; ` `        ``HailstoneNumbers(N / 2); ` `    ``}  ` `    ``else` `if` `(N % 2 != 0) { ` ` `  `        ``// N is Odd. ` `        ``c++; ` `        ``HailstoneNumbers(3 * N + 1); ` `    ``} ` `} ` ` `  `// Driver function ` `int` `main() ` `{ ` `    ``int` `N = 7; ` `    ``int` `x; ` ` `  `    ``// Function to generate Hailstone ` `    ``// Numbers ` `    ``x = HailstoneNumbers(N); ` ` `  `    ``// Output: Number of Steps ` `    ``cout << endl; ` `    ``cout << ``"Number of Steps: "` `<< x; ` `    ``return` `0; ` `} `

## Java

 `// Java program to generate hailstone  ` `// numbers and calculate steps required  ` `// to reduce them to 1 ` `import` `java.util.*; ` `class` `GFG ` `{ ` `static` `int` `c; ` ` `  `// function to print hailstone numbers ` `// and to calculate the number of steps  ` `// required ` `static` `int` `HailstoneNumbers(``int` `N) ` `{ ` `    ``System.out.print(N + ``" "``); ` ` `  `    ``if` `(N == ``1` `&& c == ``0``) { ` ` `  `        ``// N is initially 1. ` `        ``return` `c; ` `    ``}  ` `    ``else` `if` `(N == ``1` `&& c != ``0``) { ` ` `  `        ``// N is reduced to 1. ` `        ``c++; ` `        ``return` `c; ` `    ``}  ` `    ``else` `if` `(N % ``2` `== ``0``) { ` ` `  `        ``// If N is Even. ` `        ``c++; ` `        ``HailstoneNumbers(N / ``2``); ` `    ``}  ` `    ``else` `if` `(N % ``2` `!= ``0``) { ` ` `  `        ``// N is Odd. ` `        ``c++; ` `        ``HailstoneNumbers(``3` `* N + ``1``); ` `    ``} ` `    ``return` `c; ` `} ` ` `  `// Driver function ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `N = ``7``; ` `    ``int` `x; ` ` `  `    ``// Function to generate Hailstone ` `    ``// Numbers ` `    ``x = HailstoneNumbers(N); ` ` `  `    ``// Output: Number of Steps ` `    ``System.out.println(); ` `    ``System.out.println(``"Number of Steps: "` `+x); ` `} ` `} ` `/* This code is contributed by Kriti Shukla */`

## Python3

 `# Python3 program to generate  ` `# hailstone numbers and  ` `# calculate steps required  ` `# to reduce them to 1 ` ` `  `# function to print hailstone  ` `# numbers and to calculate  ` `# the number of steps required ` `def` `HailstoneNumbers(N, c): ` `    ``print``(N, end ``=` `" "``); ` `    ``if` `(N ``=``=` `1` `and` `c ``=``=` `0``): ` `         `  `        ``# N is initially 1. ` `        ``return` `c; ` `    ``elif` `(N ``=``=` `1` `and` `c !``=` `0``): ` `         `  `        ``# N is reduced to 1. ` `        ``c ``=` `c ``+` `1``; ` `    ``elif` `(N ``%` `2` `=``=` `0``): ` `         `  `        ``# If N is Even. ` `        ``c ``=` `c ``+` `1``; ` `        ``c ``=` `HailstoneNumbers(``int``(N ``/` `2``), c); ` `    ``elif` `(N ``%` `2` `!``=` `0``): ` `         `  `        ``# N is Odd. ` `        ``c ``=` `c ``+` `1``; ` `        ``c ``=` `HailstoneNumbers(``3` `*` `N ``+` `1``, c); ` `    ``return` `c; ` ` `  `# Driver Code ` `N ``=` `7``; ` ` `  `# Function to generate  ` `# Hailstone Numbers ` `x ``=` `HailstoneNumbers(N, ``0``); ` ` `  `# Output: Number of Steps ` `print``(``"\nNumber of Steps: "``, x); ` ` `  `# This code is contributed ` `# by mits `

## C#

 `// C# program to generate hailstone  ` `// numbers and calculate steps required  ` `// to reduce them to 1 ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `c; ` `     `  `    ``// function to print hailstone numbers ` `    ``// and to calculate the number of steps  ` `    ``// required ` `    ``static` `int` `HailstoneNumbers(``int` `N) ` `    ``{ ` `        ``Console.Write(N + ``" "``); ` `     `  `        ``if` `(N == 1 && c == 0) { ` `     `  `            ``// N is initially 1. ` `            ``return` `c; ` `        ``}  ` `        ``else` `if` `(N == 1 && c != 0) { ` `     `  `            ``// N is reduced to 1. ` `            ``c++; ` `            ``return` `c; ` `        ``}  ` `        ``else` `if` `(N % 2 == 0) { ` `     `  `            ``// If N is Even. ` `            ``c++; ` `            ``HailstoneNumbers(N / 2); ` `        ``}  ` `        ``else` `if` `(N % 2 != 0)  ` `        ``{ ` `     `  `            ``// N is Odd. ` `            ``c++; ` `            ``HailstoneNumbers(3 * N + 1); ` `        ``} ` `        ``return` `c; ` `    ``} ` `     `  `    ``// Driver function ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `N = 7; ` `        ``int` `x; ` `     `  `        ``// Function to generate Hailstone ` `        ``// Numbers ` `        ``x = HailstoneNumbers(N); ` `     `  `        ``// Output: Number of Steps ` `        ``Console.WriteLine(); ` `        ``Console.WriteLine(``"Number of Steps: "` `+x); ` `    ``} ` `} ` `// This code is contributed by vt_m `

## PHP

 ` `

Output:

```7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Number of Steps: 17
```

This article is contributed by Vineet Joshi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : Mithun Kumar

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.