---
# System prepended metadata

title: 遞迴範例
tags: [recursion, tutorial article]

---

```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;
    }
}
```