2013-02-20 1 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 не поддерживает рекурсию? –

+1

0_o Java поддерживает рекурсию просто отлично ... – 2013-02-20 16:49:39

+0

К сожалению, я использовал неправильный термин. «не поддерживает» - я имею в виду, что рекурсия выполняется медленнее, чем обычно, когда цикл while/for. – rtyusolf

ответ

5

Рекурсия - неплохой инструмент на Java. Конечно, теоретически каждый вызов функции имеет стоимость, но компилятор JIT часто может оптимизировать это сам по себе во время выполнения и обеспечивает хорошую производительность. Вы не должны оптимизировать функцию, которая явно написана с рекурсией с другой, которая без громоздки будет без нее, за исключением случаев, когда вы действительно испытываете проблемы, но я сомневаюсь, что у вас будет какой-либо код. С опытом вы увидите, что разборчивость кода имеет большое значение.

Чтобы ответить на ваш вопрос, другой способ осуществить то, что вы хотите, просто в цикле до тех пор, Num не равен 0 и сохранения результата деления на 10 в NUM каждый раз:

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

Еще раз спасибо. На самом деле не проблема писать другими способами. Но я просто хочу сосредоточиться на том, почему и когда мне нужно писать другими способами. Также, как узнать, какой из них работает быстрее/или занимает меньше места, поскольку я не совсем уверен, что означало пространство. – rtyusolf

Смежные вопросы