```java
public class RecursionTest {
public static void main(String[] args) {
int result = sum1(1, 10);
System.out.println(result);
int result2 = sum2(1, 10);
System.out.println(result2);
//sum1 跟 sum3 是一樣的結果,
//只是 sum3 把要 return 的值提出來,
//會比較容易觀察過程,並理解整體是如何演化
int result3 = sum3(1, 10);
System.out.println(result3);
}
public static int sum1(int start, int end) {
if (end > start) {
return end + sum1(start, --end);
}
return end;
}
//錯誤示範,end + sum 是一體計算的,只提 sum 出來會導致計算錯誤
public static int sum2(int start, int end) {
if (end > start) {
int r = sum2(start, --end);
return end + r;
}
return end;
}
public static int sum3(int start, int end) {
if (end > start) {
System.out.println(end);
int r = end + sum3(start, --end);
System.out.println(end + " " + r);
return r;
}
return end;
}
}
```