>>947
何とか導き出せなかったのは残念ですが…

static int arrayMin(int[] a, int i) {
System.out.println("I: i=" + i);
if (i > 0) {
System.out.println("C: a[" + (i - 1) + "]=" + a[i - 1]);
int min = arrayMin(a, i - 1);
System.out.println("R1: min=" + min + " a[" + (i - 1) + "]=" + a[i - 1]);

// if (min > a[i - 1]) {
// min = a[i - 1];
// }
// System.out.println("R: min=" + min);
return min;
}
System.out.println("R2: a[" + i + "]=" + a[i]);
return a[i];
}

まず"if (i > 0)"によりa[9]〜a[0]についてarrayMinメソッドの再帰呼び出しが起こりますよね
(>>921で1つ目と言っていたところ)

i=0でarrayMinメソッドが呼ばれたら、末尾のreturnが実行されa[0]を返却値に戻り
最後のarrayMinメソッドの呼び出しに戻る,つまりminの値はa[0]となる
つまりその前の1つ目のreturnでminを返却値として戻る
以降、順次1つ目のreturnで戻ることになる
(同じく3つ目と言っていたところ)

それらはまず上記のコードで確認してみれば判るでしょう

そして2つ目と言っていたところは上記のコードのコメントアウトしてあるコードを生かしてみれば確認できるでしょう