java.lang.StackOverflowError递归的栈溢出错误
?遞歸在JAVA中是指方法本身調(diào)用自己,以此來(lái)解決問(wèn)題普通循環(huán)不太容易解決的問(wèn)題。
遞歸能解決一些特定的問(wèn)題,但相對(duì)的也有其缺點(diǎn)。遞歸運(yùn)行速度較慢,在遞歸調(diào)用過(guò)
程中系統(tǒng)為每一層返回點(diǎn),局部量等提供棧來(lái)存儲(chǔ)。因?yàn)檫@個(gè)特性,如果在遞歸調(diào)用中,沒(méi)有一個(gè)
條件能讓遞歸退出調(diào)用自身。那么就會(huì)造成棧溢出情況,即java.lang.StackOverflowError,此外,
如果在方法中如果A調(diào)用B,B調(diào)用C,C調(diào)用A,也會(huì)出現(xiàn)以上錯(cuò)誤,要避免這種調(diào)用。以下是遞歸比較
適合情況:
(1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))
(2)問(wèn)題解法按遞歸算法實(shí)現(xiàn)。
這類(lèi)問(wèn)題雖則本身沒(méi)有明顯的遞歸結(jié)構(gòu),但用遞歸求解比迭代求解更簡(jiǎn)單,如Hanoi問(wèn)題。
(3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。
如二叉樹(shù)、廣義表等,由于結(jié)構(gòu)本身固有的遞歸特性,則它們的操作可遞歸地描述。
總結(jié)
以上是生活随笔為你收集整理的java.lang.StackOverflowError递归的栈溢出错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java min 函数的使用方法_【Py
- 下一篇: brew php imagemagick