isefire icon

CollatzExtended

isefire | PRO | 07/16/14 04:37:44 AM UTC | 0 ⭐ | 477 👁️ | Never ⏰ | []
Java |

1.99 KB

|

None

|

0 👍

/

0 👎

/* Collatz
 * <Description>
 * Famous unsolved problem in number theory, known as the Collatz problem.
 * This program prints the number less than N(runtime argument) that has the
 * largest number of iterations through collatz(), and then prints that
 * number.
 *
 * <Usage>
 * %javac Collatz.java
 * 
 * %java Collatz 3
 * Value of n for which n < N # of recursive calls for collatz(n) is maximized: 2
 * Value of # of recursive calls: 2
 *
 * java Collatz 7
 * Value of n for which n < N # of recursive calls for collatz(n) is maximized: 6
 * Value of # of recursive calls: 9
 * 
 * 
 * java Collatz 846
 * Value of n for which n < N # of recursive calls for collatz(n) is maximized: 703
 * Value of # of recursive calls: 171
 * 
 * <References>
 * CIS201-L UAB SUMMER 2014 Dr. Sloan
 * http://introcs.cs.princeton.edu/java/23recursion/Collatz.java.html
 * 
 * @author
 * Dan Latham <[email protected]>
 *
 * @version 0.0.1
 *
 */
public class Collatz
{
    public static int strip(String word)
    {
        int length = word.split(" ").length;
        return length;
    }
    public static String collatz(int n, String word)
    {
        if (n == 1) return word;
        else if (n % 2 == 0)
        {
            word = word+" "+n/2;
            //System.out.println(word);
            word = collatz(n / 2, word);
        }
        else
        {
            word = word+" "+(3*n+1);
            //System.out.println(word);
            word = collatz(3*n + 1, word);
        }
        return word;
    }
    public static void main(String[] args)
    {
        int n = Integer.parseInt(args[0])-1;
        int placeholder_n = n;
        int placeholder_length = 0;
        String word = "";
        while (n > 1)
        {
            word = collatz(n, String.format("%s", n));
            //DEBUG System.out.println(word);
            int z = strip(word);
            if (z > placeholder_length)
            {
                placeholder_length = z;
                placeholder_n = n;
            }
            n -= 1;
        }
        //DEBUG System.out.println(word);
        System.out.println("Value of n for which n < N # of recursive ca"+
                            "lls for collatz(n) is maximized: "+
                            placeholder_n);
        System.out.println("Value of # of recursive calls: "+
                            placeholder_length);
    }
    
}

Comments