patternjavaMinor
Recursive method to print a descending then ascending integer sequence
Viewed 0 times
methoddescendingsequencerecursiveprintthenintegerascending
Problem
From a programming assignment:
Write a method
parameter and prints a symmetric sequence of
descending integers ending in 1 followed by ascending integers
beginning with 1, as in the table below:
Notice that for odd numbers the sequence has a single 1 in the middle
while for even values it has two 1s in the middle.
Your method should throw an
value less than 1. A client using this method would have to call
I wrote code that is pretty ugly, but produces the correct output. I've put this up to see if anyone had a more efficient recursive algorithm and to put the example up. There are not many hits about more complex recursive methods in Java when searching.
`public static void writeSequence(int n) {
if( n
Write a method
writeSequence that accepts an integer n as aparameter and prints a symmetric sequence of
n numbers withdescending integers ending in 1 followed by ascending integers
beginning with 1, as in the table below:
Call Output
writeSequence(1); 1
writeSequence(2); 1 1
writeSequence(3); 2 1 2
writeSequence(4); 2 1 1 2
writeSequence(5); 3 2 1 2 3
writeSequence(6); 3 2 1 1 2 3
writeSequence(7); 4 3 2 1 2 3 4
writeSequence(8); 4 3 2 1 1 2 3 4
writeSequence(9); 5 4 3 2 1 2 3 4 5
writeSequence(10); 5 4 3 2 1 1 2 3 4 5
Notice that for odd numbers the sequence has a single 1 in the middle
while for even values it has two 1s in the middle.
Your method should throw an
IllegalArgumentException if passed avalue less than 1. A client using this method would have to call
println to complete the line of output.I wrote code that is pretty ugly, but produces the correct output. I've put this up to see if anyone had a more efficient recursive algorithm and to put the example up. There are not many hits about more complex recursive methods in Java when searching.
`public static void writeSequence(int n) {
if( n
Solution
Assuming you can use a helper function, you could do this:
If you can't use a helper function like this to workaround the strange IllegalArgumentException requirement, you could do this (which is similar to your solution, but a little more succinct):
public static void writeSequence(int n) {
if (n < 1) throw new IllegalArgumentException();
writeSequenceHelper(n);
}
public static void writeSequenceHelper(int n) {
if (n <= 0) return;
int m = (n+1) / 2;
System.out.print(m + " ");
writeSequenceHelper(n - 2);
System.out.print(m + " ");
}If you can't use a helper function like this to workaround the strange IllegalArgumentException requirement, you could do this (which is similar to your solution, but a little more succinct):
public static void writeSequence2(int n) {
if (n < 1) throw new IllegalArgumentException();
if (n == 1) {
System.out.print("1");
} else if (n == 2) {
System.out.print("1 1");
} else {
int m = (n+1) / 2;
System.out.print(m + " ");
writeSequence2(n - 2);
System.out.print(" " + m);
}
}Code Snippets
public static void writeSequence(int n) {
if (n < 1) throw new IllegalArgumentException();
writeSequenceHelper(n);
}
public static void writeSequenceHelper(int n) {
if (n <= 0) return;
int m = (n+1) / 2;
System.out.print(m + " ");
writeSequenceHelper(n - 2);
System.out.print(m + " ");
}public static void writeSequence2(int n) {
if (n < 1) throw new IllegalArgumentException();
if (n == 1) {
System.out.print("1");
} else if (n == 2) {
System.out.print("1 1");
} else {
int m = (n+1) / 2;
System.out.print(m + " ");
writeSequence2(n - 2);
System.out.print(" " + m);
}
}Context
StackExchange Code Review Q#25964, answer score: 3
Revisions (0)
No revisions yet.