2013-02-20 64 views
3

我出來了這個Java代碼來解決sumOfDigits。編程新手 - 更有效sumOfDigits

public static int sumOfDigits(int num){ 
     if (num == 0){ 
      return 0; 
     } 
     return num%10+ sumOfDigits(num/10); 
    } 

嗯,我知道這工作,但我希望任何人將分享關於如何提高代碼效率,因爲我知道Java不支持遞歸是很好的見解或材料(一些正規的術語/知識)。

+9

是什麼讓你印象的Java不很好地支持遞歸? – 2013-02-20 16:49:38

+1

0_o Java支持遞歸就好了... – 2013-02-20 16:49:39

+0

糟糕我可能使用了錯誤的術語。 「不支持」 - 我的意思是遞歸在/ for循環時運行速度比平常慢。 – rtyusolf 2013-02-20 16:51:06

回答

5

在Java中,遞歸併不是一個糟糕的工具。當然,理論上每個函數調用都有成本,但JIT編譯器通常能夠在運行時自行優化,並提供良好的性能。你不應該優化一個清楚地用另一個遞歸編寫的函數,除非你真的遇到問題,否則我不懷疑你會使用那個代碼。有了經驗,您會看到代碼易讀性非常重要。

要回答你的問題,其他的方式來實現你想要的是簡單的循環,直到NUM等於0和NUM每10存儲除法運算的結果每次都:

int total = 0; 
while (num != 0) { 
    total += num % 10; 
    num = num/10; 
} 
+0

再次感謝。以其他方式寫作並不是一個真正的問題。 但我只想專注於爲什麼以及何時需要以其他方式編寫。還有如何知道哪一個運行更快/或佔用更少的空間,因爲我不太確定空間是什麼意思。 – rtyusolf 2013-02-20 17:16:03