天天看點

java支援尾遞歸優化麼_java支援并優化遠端尾遞歸調用嗎?

Java支援尾遞歸調用,但是AFAIK并沒有優化它們。我認為這是Scala編譯器,隻是這樣做,而不是JVM本身。檢視Scala中的@tailrec注釋,看看編譯器能夠做些什麼呢:)

但是無論Java / JVM是否優化尾部遞歸,您的功能将比需要更難優化。

看這個:

int sum(List integers) {

return sum(integers, 0);

}

int sum(List integers, int sumSoFar) {

if (integers.isEmpty())

return sumSoFar;

else

return sum(

integers.subList(1, integers.size()),

sumSoFar + integers.get(0)

);

}

看到,我添加了一個過載的和與一個遠的計算的和參數。這樣,當您在else分支中重複出現時,您不需要實際的堆棧架構 – 您可以在遞歸調用中将所有需要作為函數參數。

在您的代碼片段中,隻要遞歸調用,堆棧架構可能必須存在。