import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Recur3 {
	static void recur3(int n) {
		if (n <= 0) {
			throw new UnsupportedOperationException(String.valueOf(n));
		}
		// new int[100]で宣言する意味はないです。
		int[] nstk = new int[n];
		int[] sstk = new int[n];
		int ptr = -1;
		int sw = 0;

		while (true) {
			if (n > 0) {
				ptr++;
				nstk[ptr] = n;
				sstk[ptr] = sw;
				if (sw == 0)
					n -= 1;// n = n - 1;
				else if (sw == 1) {
					n -= 2;
					sw = 0;
				}
				continue;
			}
			do {
				n = nstk[ptr];
				sw = sstk[ptr] + 1;
				// 動作確認のために変数ptrと配列の内容をデバックプリント
				System.out.println(Stream.generate(() -> "-").limit(30).collect(Collectors.joining("")));
				System.out.println(ptr);
				System.out.println(Arrays.toString(nstk) + ' ' + Arrays.toString(sstk));
				ptr--;
				if (sw == 2) {
					System.out.println(n);
					if (ptr < 0)
						return;
				}
			} while (sw == 2);
		}
	}

	public static void main(String[] args) {
		try (Scanner sc = new Scanner(System.in)) {
			System.out.print("整数を入力せよ：");
			int x = Integer.parseInt(sc.nextLine());
			recur3(x);
		}
	}
}

@@ -164,16 +164,122 @@
 nt n) %7B%0A
+%09%09// %E5%BC%95%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E3%81%9D%E3%81%AE%E5%80%A4%E3%82%92%E8%A8%B1%E5%AE%B9%E3%81%97%E3%81%AA%E3%81%84%E6%99%82%E3%81%AF%E3%80%81%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%A8%E3%83%A9%E3%83%BC(java.lang.ArrayIndexOutOfBoundsException)%E3%82%92%E7%99%BA%E7%94%9F%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E4%BB%BB%E6%84%8F%E3%81%AE%E4%BE%8B%E5%A4%96%E3%82%92thow%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E5%8C%96%E3%81%99%E3%82%8B%E3%80%82%0A
 %09%09if (n 

throw new UnsupportedOperationException