编程中的新手 - 更有效的sumOfDigits

rty*_*olf 3 java performance

我推出了这个Java代码来解决sumOfDigits.

 public static int sumOfDigits(int num){
        if (num == 0){
             return 0;
        }
        return num%10+ sumOfDigits(num/10);
    }
Run Code Online (Sandbox Code Playgroud)

我知道这有效,但我希望有人能分享关于如何提高代码效率的见解或材料(一些正式的术语/知识),因为我知道Java不支持递归.

Cyr*_* Ka 5

递归在Java中根本不是一个糟糕的工具.当然,理论上每个函数调用都有成本,但JIT编译器通常能够在运行时自行优化它并提供良好的性能.你不应该优化一个明确用递归写入的函数,如果没有它会更麻烦,除非你真的遇到问题,但我怀疑你会有任何代码.根据经验,您将看到代码易读性非常重要.

要回答你的问题,实现你想要的另一种方法就是循环,直到num等于0并且每次将每10的除法结果存储在num中:

int total = 0;
while (num != 0) {
    total += num % 10;
    num = num / 10;
}
Run Code Online (Sandbox Code Playgroud)