# C Exercises: Hailstone Sequence of a given number upto 1

## C Recursion : Exercise-18 with Solution

Write a program in C to find the Hailstone Sequence of a given number.
Test Data :
Input any number (positive) to start for Hailstone Sequence : 13
Expected Output :

``` The hailstone sequence starting at 13 is :
13  40  20  10  5  16  8  4  2 1
The length of the sequence is 10.
```

C Code:

```#include <stdio.h>

// function to generate next number
int getNextValue(int aNum)
{
int i = aNum;
if (i % 2 == 0)
{
i = i/2;
}
else
{
i = 3 * i + 1;
}
return (i);// returning the value of next number to the called function
}
// function to generate Hailstone number
void getHailstone(int aNum)
{
int hlSe = aNum;
if (hlSe == 1)
{
printf("%i ", hlSe);
}
else
{
printf(" %i ", hlSe);
getHailstone(getNextValue(hlSe));// calling the function itself recursively
}
}
// Function to count the length of the Hailstone sequence
int countLength(int aNum)
{
int hlSe = aNum;
if(hlSe == 1)
{
return 1;
}
else
{
return 1+countLength(getNextValue(hlSe));// calling the function itself recursively
}

}

int main(int argu)
{
int aNum;
printf("\n\n Recursion : Hailstone Sequence of a given number upto 1 :\n");
printf("--------------------------------------------------------------\n");
printf(" Input any number (positive) to start for Hailstone Sequence : ");
scanf("%i", &aNum);

printf("\n The hailstone sequence starting at %i is : \n", aNum);
getHailstone(aNum);
printf("\n\n");
printf(" The length of the sequence is %i. \n\n", countLength(aNum));
return 0;
}
```

Flowchart :

C Practice online:

```#include <stdio.h>

// functon to generate next number
int getNextValue(int aNum)
{
int i = aNum;
if (i % 2 == 0)
{
i = i/2;
}
else
{
i = 3 * i + 1;
}
return (i);// returning the value of next number to the called function
}
// function to generate Hailstone number
void getHailstone(int aNum)
{
int hlSe = aNum;
if (hlSe == 1)
{
printf("%i ", hlSe);
}
else
{
printf(" %i ", hlSe);
getHailstone(getNextValue(hlSe));// calling the function itself recursively
}
}
// Function to count the length of the Hailstone sequence
int countLength(int aNum)
{
int hlSe = aNum;
if(hlSe == 1)
{
return 1;
}
else
{
return 1+countLength(getNextValue(hlSe));// calling the function itself recursively
}

}

int main(int argu)
{
int aNum;
printf("\n\n Recursion : Hailstone Sequence of a given number upto 1 :\n");
printf("--------------------------------------------------------------\n");
printf(" Input any number (positive) to start for Hailstone Sequence : ");
scanf("%i", &aNum);

printf("\n The hailstone sequence starting at %i is : \n", aNum);
getHailstone(aNum);
printf("\n\n");
printf(" The length of the sequence is %i. \n\n", countLength(aNum));
return 0;
}```

Improve this sample solution and post your code through Disqus.

﻿