[英]Tail recursion optimization and recursion in Java
我有一個關於尾部調用優化的問題,我需要知道此Java代碼的行為:
private void doSomething(int v) {
inf f = someCalculation(v);
if (f < 0) doSomething(v/2);
else doSomething(v*2);
}
這段代碼是一個廢話示例,但在這種情況下,我的問題是:
謝謝
編輯:
請提供一個示例,說明如果該語言不是Java,而是其他具有TCO的語言,將如何執行此操作
Java 8完全沒有尾調用優化。 沒有調用將被優化(變成迭代/ goto語句)。
但是,關於Java的TCO的討論由來已久,而Guy Steele是其最著名的支持者之一。
我建議從mlvm-dev
郵件列表中閱讀此帖子 ,以mlvm-dev
對該主題的最新評論。
嘗試運行以下代碼:
public static void main(String[] args) {
for (int i = 1; i > 0; i *= 2) { doSomething(i); }
}
private static void doSomething(int start) {
doSomething(start, start);
}
private static void doSomething(int i, int start) {
if (i == 0) { System.out.println("done from " + start); }
else { doSomething(i - 1, start); }
}
如果JVM可以在沒有堆棧溢出的情況下運行它,則意味着它可以進行尾部遞歸優化(或非常好的常數傳播)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.