Reputation: 3
Cant get the largest Length function to work correctly.
Everything else works perfectly. The function has to be recursive.
Assignment: 1a
Author: Cory Church
File: hailstone.cpp
Tab stops: 3
Problem: The Hailstone program reads in an int then computes and prints the hailstone sequence for that number. It also prints the length of the sequence, the largest number in the sequence, how many odd numbers they are, and then the longest sequence from one to the number read in.
Example:
interaction with program:
What number shall I start with? 7 The hailstone sequence starting at 7 is 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 The length of the sequence is 17. 6 of the numbers are odd. The largest number in the sequence is 52. The longest hailstone sequence starting with a number up to 7 has length 17
#include <cstdio>
using namespace std;
#include <algorithm>
// ****************************************************************************
/* next(n) returns the value of the next value in the hailstone
sequence when the current value is n.
Example: next(7) = 22 and next(22) = 11.
*/
int next(int n)
{
int i = n;
if (i % 2 == 0)
{
i = i/2;
}
else
{
i = 3 * i + 1;
}
return (i);
}
// ****************************************************************************
/* printHailstoneSequence(n) writes out all of the values of the hailstone
sequence starting with n.
Example: printHailstoneSequence(7);
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
*/
void printHailstoneSequence(int n)
{
int hail = n;
if (hail == 1)
{
printf("%i ", hail);
}
else
{
printf("%i ", hail);
printHailstoneSequence(next(hail));
}
}
// ****************************************************************************
// length(n) returns the length of the Hailstone sequence of n.
// Example: length(7) = 17
int length(int n)
{
int hail = n;
if(hail == 1)
{
return 1;
}
else
{
return 1+length(next(hail));
}
}
// ****************************************************************************
/* largest(n) determines the largest number of the Hailstone sequence
starting with n.
Example: largest(7)= 52
*/
int largest(int n)
{
int hail = n;
if (hail == 1)
{
return 1;
}
else
{
return max(largest(next(hail)), hail);
}
}
// ****************************************************************************
/* odd(n) determines the number of odd numbers in the Hailstone sequence
starting with n.
Example: odd(7)= 6
*/
int odd(int n)
{
if (n==1)
{
return 1;
}
else if (n%2 == 0)
{
return odd(next(n));
}
else
{
return 1+ odd(next(n));
}
}
// ****************************************************************************
/* largestLength(n) determines the longest length of any Hailstone sequence
from 1 to n.
Example: largestLength(7)= 17
*/
int largestLength(int n)
{
if (n == 1)
{
return 1;
}
else
{
return max(length(n),largestLength(length(n-1)));
}
}
// ****************************************************************************
int main(int argc, char** argv)
{
int n;
printf("What number should I start with? ");
scanf("%i", &n);
printf("The hailstone sequence starting at %i is\n", n);
printHailstoneSequence(n);
printf("\n");
printf("The length of the sequence is %i. \n", length(n));
printf("%i of the numbers are odd. \n", odd(n));
printf("The largest number in the seguence is %i. \n", largest(n));
printf("The longest hailstone sequence starting with a number up to %i has the length %i \n", n, largestLength(n));
return 0;
}
Upvotes: 0
Views: 1424
Reputation: 114579
In the largestLength
function there is a typo:
return max(length(n),largestLength(length(n-1)));
should be
return max(length(n),largestLength(n-1));
Upvotes: 2