Sequence.java


Below is the syntax highlighted version of Sequence.java from §2.3 Recursion.


/******************************************************************************
 *  Compilation:  javac Sequence.java
 *  Execution:    java Sequence a b
 *
 *  Determine minimum number of +1 and x2 operations needed to transform
 *  a into b.
 *
 *  % java Sequence 5 23
 *  23 = ((5 * 2 + 1) * 2 + 1)
 *
 *  % java Sequence 11 113
 *  113 = ((((11 + 1) + 1) + 1) * 2 * 2 * 2 + 1)
 *
 *
 ******************************************************************************/

public class Sequence {

    public static String show(int a, int b) {
        if      (a == b)     return "" + a;
        else if (b % 2 != 0) return "(" + show(a, b-1) + " + 1)";
        else if (b < 2 * a)  return "(" + show(a, b-1) + " + 1)";
        else                 return show(a, b/2) + " * 2";
    }


    public static void main(String[] args) {
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        if (a <= b) StdOut.println(b + " = " + show(a, b));
        else        StdOut.println("Error: second argument is less than first one");
    }

}


Copyright © 2000–2022, Robert Sedgewick and Kevin Wayne.
Last updated: Thu Aug 11 10:19:56 EDT 2022.