網頁

2018/8/24

Java 遞迴題目 計算整數各位數值的加總

Java的基本遞迴考題。

給定一串整數值,使用遞迴計算每個位數的加總,例如給定的的數値為456,則結果為4 + 5 + 6 = 15。

public class Main {

  public static void main(String[] args) {
    int value = 456;
    System.out.println(add(value)); // 15
  }

  // 此即為遞迴的方法
  private static int add(int v) {
    if (v < 1) {
      return 0;
    } else {
      return (v % 10) + add(v / 10);
    }
  }

}

上面的遞迴方法add()中,首先判斷傳入的值是否小於1,如果小於1則return來停止遞迴。
如不小於1,例如傳入的值為456,則先計算456除以10的餘數,也就是v % 10為6,並暫存於記憶體,準備與下一次遞迴返回的結果相加。接著計算456除以10的商數,也就是v / 10為45,並再一次傳入add(),此為第一次遞迴。

接著在第二次遞迴中,傳入的値為45。依照同樣的程式邏輯,v % 10為5,並暫存於記憶體。計算v / 10為4,傳入add(),此為第二次遞迴。

接著在第三次遞迴中,傳入的値為4。依照同樣的程式邏輯,v % 10為4,並暫存於記憶體。計算v / 10為0,傳入add(),此為第三次遞迴。

接著在第四次遞迴中,傳入的値為0。依照同樣的程式邏輯,傳入的値小於1,所以返回0。

此時回到第三次遞迴的最後,第四次遞迴返回的0與暫存的4相加等於4,然後返回。

此時回到第二次遞迴的最後,第三次遞迴返回的4與暫存的5相加等於9,然後返回。

此時回到第一次遞迴的最後,第二次遞迴返回的9與暫存的6相加等於15,然後返回。

此時回到一開始的main並印出15。

沒有留言:

張貼留言