国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

遞歸一定要用到棧嗎 java遞歸改為循環(huán)后為什么不會導(dǎo)致棧內(nèi)存溢出?

java遞歸改為循環(huán)后為什么不會導(dǎo)致棧內(nèi)存溢出?我們知道,在編程中如果想讓某個業(yè)務(wù)重復(fù)執(zhí)行,一般有兩種實現(xiàn)方式,分別是:遞歸和循環(huán)。在實際編碼過程中,我們并不建議使用遞歸,反而是建議使用循環(huán),這是為什

java遞歸改為循環(huán)后為什么不會導(dǎo)致棧內(nèi)存溢出?

我們知道,在編程中如果想讓某個業(yè)務(wù)重復(fù)執(zhí)行,一般有兩種實現(xiàn)方式,分別是:遞歸和循環(huán)。在實際編碼過程中,我們并不建議使用遞歸,反而是建議使用循環(huán),這是為什么呢?

遞歸不當(dāng)會導(dǎo)致內(nèi)存溢出

其實不單單是Java,任何一款編程語言,如果遞歸寫法不對,那就可能導(dǎo)致內(nèi)存溢出!

學(xué)過Java的朋友肯定或多或少都聽說和了解過棧內(nèi)存和堆內(nèi)存,程序在運行時,電腦操作系統(tǒng)會給每個進(jìn)程都分配有堆內(nèi)存、棧內(nèi)存,所分配的堆棧內(nèi)存都是有上限的,一旦超過了這個上限就會導(dǎo)致內(nèi)存溢出現(xiàn)象。

為什么遞歸操作容易導(dǎo)致內(nèi)存溢出呢?原因主要有以下幾點:

  • 遞歸方法體內(nèi),如果終止遞歸的條件寫錯了,那可能會導(dǎo)致無限遞歸,最終導(dǎo)致內(nèi)存溢出;

  • 即使遞歸方法及退出遞歸條件都是正常的,但若遞歸深度過深(遞歸次數(shù)過多),也會導(dǎo)致棧內(nèi)存溢出!因為棧的出入規(guī)則是先入后出(先入棧的最后再出來),如果遞歸次數(shù)過多就會導(dǎo)致只入棧不出棧,最終棧內(nèi)存溢出。

遞歸改循環(huán)可以降低內(nèi)存溢出的可能

注意,遞歸寫法改成循環(huán)寫法可以降低內(nèi)存溢出的風(fēng)險,但這不是絕對的,如果循環(huán)寫成了死循環(huán)一樣會導(dǎo)致內(nèi)存溢出。

遞歸寫法改成循環(huán)寫法的好處是,不會在短時間內(nèi)出現(xiàn)棧的只入不出現(xiàn)象,所以可以規(guī)避棧內(nèi)存溢出現(xiàn)象。