2

I'm putting together a code to output the following pattern:

000000000X
00000000XX
0000000XXX
000000XXXX
00000XXXXX
0000XXXXXX
000XXXXXXX
00XXXXXXXX
0XXXXXXXXX

(each line should be one after another. I'm not quite sure how to display the pattern on forums...sorry)

I'm supposed to use a recursive loop inside the code but I end up in an infinite loop and I really don't understand why..(It may be ok to assue that I've never used a recursive loop practically).This is my code:

class Recursion {
    //recursion should stop after 9 attempts
    static int stopindex = 9;

    public static void main(String[] args) {
        //a=number of "O"s and b=number of "X"s
        int a = 9;
        int b = 1;
        recursion(a, b);
    }
    public static void recursion(int a, int b) {

        //start of recursion at index 1
        int startindex = 1;

        //stop condition of recursion
        if (startindex == stopindex)
            return;

        //printing of pattern
        for (int i = a; i > 0; i--) {
            System.out.print("O");
        }
        for (int j = 0; j < b; j++) {
            System.out.print("X");
        }
        System.out.println();

        --a;
        ++b;
        ++startindex;
        recursion(a, b);
    }
}

4 Answers 4

7

Your algorithm is slightly off, you shouldn't have the static variables and you shouldn't change a, and your first for loop condition - I think you wanted,

public static void recursion(int a, int b) {
  // stop condition of recursion
  if (a == b) return;

  // printing of pattern
  for (int i = a - b; i > 0; i--) {
    System.out.print("O");
  }
  for (int j = 0; j < b; j++) {
    System.out.print("X");
  }
  System.out.println();

  // --a;
  ++b; // <-- this could be done in the recursion call below,
  recursion(a, b);
  // recursion(a, ++b); // <-- like that.
}

The output is

OOOOOOOOX
OOOOOOOXX
OOOOOOXXX
OOOOOXXXX
OOOOXXXXX
OOOXXXXXX
OOXXXXXXX
OXXXXXXXX
Sign up to request clarification or add additional context in comments.

1 Comment

Nice use of for loop...Never used it like that before. Thanks again.
0

You are resetting the variable startindex at the start of recursion method, so if the recursion method is called and startindex is increased by one and then the method is called upon again the variable will be reset, due to int startindex = 1;.

class Recursion {
static int stopindex = 9;
int startindex = 1;
public static void main(String[] args) {
    //a=number of "O"s and b=number of "X"s
    int a = 9;
    int b = 1;
    recursion(a, b);
}
public static void recursion(int a, int b) {

    //start of recursion at index 1
    //int startindex = 1; - removed due to variable reset

    //stop condition of recursion
    if (startindex == stopindex)
        return;

    //printing of pattern
    for (int i = a; i > 0; i--) {
        System.out.print("O");
    }
    for (int j = 0; j < b; j++) {
        System.out.print("X");
    }
    System.out.println();

    --a;
    ++b;
    ++startindex;
    recursion(a, b);
}
}

Comments

0

Your problem is that your start index gets reset each time the function is called. Try this code

class Recursion {
//recursion should stop after 9 attempts
static int stopindex = 9;

public static void main(String[] args) {
    //a=number of "O"s and b=number of "X"s
    int a = 9;
    int b = 1;
    int startindex = 1;
    recursion(a, b, startindex);

}
public static void recursion(int a, int b, int startIndex) {

    //start of recursion at index 1


    //stop condition of recursion
    if (startIndex > stopindex)
        return;

    //printing of pattern
    for (int i = a; i > 0; i--) {
        System.out.print("O");
    }
    for (int j = 0; j < b; j++) {
        System.out.print("X");
    }
    System.out.println();

    --a;
    ++b;
    ++startIndex;
    recursion(a, b, startIndex);
}
}

Output

OOOOOOOOOX
OOOOOOOOXX
OOOOOOOXXX
OOOOOOXXXX
OOOOOXXXXX
OOOOXXXXXX
OOOXXXXXXX
OOXXXXXXXX
OXXXXXXXXX

Comments

0

You don't need startindex at all - your parameter a is all you need to formulate the halting condition for the recursion. For every recursive invocation of recusion, a is one less and once a == 0 you break the recursion.

As is, you are resetting startindex to 1 every time so the breaking condition is always false.

public static void recursion(int a, int b) {
    if (a == 0) {
       return;
    }

    // Print here

    recursion(a - 1, b + 1);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.