###前提・実現したいこと
このプログラムのrecur3(3)で実行したときの
do-while文でのswの遷移が掴めません。
特にdo-while文でswが2になるタイミングが分かりません。
解説してもらえる方お願いします。
do-while文内の
sw = sstk[ptr] + 1
この部分です。
sw == 2になる機序が分かりません。
やっていることは
public void recur3(int n){
recur3(n-1);
recur3(n-2);
System.out.println(n);
}
do-while文で
ptr--をやっているので
n = nstk[ptr] が範囲外IndexOutOfBoundsExceptionにならないかと思うんですが、
実行するとならない。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
java
1import java.util.Scanner; 2 3class Recur3 { 4 5 static void recur3(int n) { 6 int[] nstk = new int[100]; 7 int[] sstk = new int[100]; 8 int ptr = -1; 9 int sw = 0; 10 11 while (true) { 12 if (n > 0) { 13 ptr++; 14 nstk[ptr] = n; 15 sstk[ptr] = sw; 16 17 if (sw == 0) 18 n = n - 1; 19 else if (sw == 1) { 20 n = n - 2; 21 sw = 0; 22 } 23 continue; 24 } 25 do { 26 n = nstk[ptr]; 27 sw = sstk[ptr] + 1; 28 ptr--; 29 30 if (sw == 2) { 31 System.out.println(n); 32 if (ptr < 0) 33 return; 34 } 35 } while (sw == 2); 36 } 37 } 38 39 public static void main(String[] args) { 40 Scanner stdIn = new Scanner(System.in); 41 42 System.out.print("整数を入力せよ:"); 43 int x = stdIn.nextInt(); 44 45 recur3(x); 46 } 47}
###試したこと
nstk[0] 3 nstk[1] 2 nstk[2] 1
sstk[0] 0 sstk[1] 0 sstk[2] 0
n = nstk[2] = 1
sw = sstk[2] + 1 = 0 + 1 = 1
ptr-- =2 - 1 = 1
sstk[0] 0 sstk[1] 0 sstk[2] 0
n = nstk[1] = 2
sw = sstk[1] + 1 = 1??
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/30 07:20