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。
沒有留言:
張貼留言