2015-12-01 91 views
-6
public static int func(int n){ 
    int result ; 
    result = func(n - 1); 
    return result; 
} 

爲什麼我收到爲什麼此方法會導致無限遞歸?

異常線程 「main」 java.lang.StackOverflowError的

當我把這個方法?

+3

那麼你會期望*會發生什麼?你會如何期待它終止? –

+1

爲什麼不應該呢?你總是在'func'方法中調用'func'。你認爲該計劃何時會到達「回報」? – Tom

+0

https://en.wikipedia.org/wiki/Infinite_loop#Infinite_recursion – HRgiger

回答

1

func總是自己調用。沒有停止條件。每次調用都會創建一個新的堆棧幀,直到調用堆棧已滿並引發StackOverflowError

遞歸方法應該總是有停止條件。例如 - n < 0

public static int func(int n){ 
    int result; 
    if (n >= 0) 
     result = func(n - 1); 
    else 
     result = 0; 
    return result; 
} 
+0

非常感謝Mr.Eran –

相關問題