數(shù)據(jù)結(jié)構(gòu)——棧以及堆棧溢出

關(guān)于棧stack,基本概念,今天主要說一下,調(diào)用棧call stack以及遞歸。

堆棧:是計(jì)算機(jī)科學(xué),其特殊之處在于只能允許在鏈接串列或陣列的一端(top)進(jìn)行加入數(shù)據(jù)(push)和輸出數(shù)據(jù)(pop)的運(yùn)算。特點(diǎn)是:后進(jìn)先出,除頭尾節(jié)點(diǎn)之外,每個(gè)元素有一個(gè)前驅(qū),一個(gè)后繼。

那么什么是調(diào)用棧呢?

官方的概念就不說了,函數(shù)的調(diào)用使用到的就是調(diào)用棧,經(jīng)常用于存放程序的返回地址。

這個(gè)函數(shù)的調(diào)用過程是這樣:

在遞歸中就用到了調(diào)用棧,先用遞歸實(shí)現(xiàn)一下階乘,然后我們看以下調(diào)用的過程。

調(diào)用的過程:

從圖中我們可以看到,在遞歸的過程中,需要占用內(nèi)存的調(diào)用棧會(huì)越來越多,那么如果是一個(gè)無線遞歸的函數(shù),勢(shì)必會(huì)面臨棧溢出的問題,當(dāng)然了即便不是無限的,層數(shù)太多的話也會(huì)面臨堆棧溢出的問題。因此在使用遞歸函數(shù)的時(shí)候,需要注意基線條件和調(diào)用條件的書寫,基線條件保證不會(huì)出現(xiàn)無限遞歸的情況。

如果出現(xiàn)棧溢出應(yīng)該怎么辦?兩種方法:1.使用循環(huán);2.尾遞歸

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,975評(píng)論 1 19
  • 0. 引言 如果你學(xué)的第一門程序語言是C語言,那么下面這段程序很可能是你寫出來的第一個(gè)有完整的 “輸入---處理-...
    pandolia閱讀 14,409評(píng)論 13 27
  • 1.棧 1.1.棧的定義 棧(stack)是限定僅在表尾(棧頂 top)進(jìn)行插入和刪除操作的后進(jìn)先出的線性表。 p...
    JonyFang閱讀 1,602評(píng)論 0 21
  • 一、為什么探討這個(gè)話題。 隨著信息傳遞方式的不斷升級(jí),尤其是移動(dòng)互聯(lián)網(wǎng)和自媒體的發(fā)展,在企業(yè)管理領(lǐng)域各種領(lǐng)域的所謂...
    _單旭東_閱讀 785評(píng)論 0 3
  • 張小川已經(jīng)有7天沒有回家。她在100公里以外的姨媽家里住得渾身不自在,特大城市總有點(diǎn)緊繃的意頭,早晚高峰憋死了...
    夢(mèng)蝶Ariel閱讀 566評(píng)論 0 1

友情鏈接更多精彩內(nèi)容