關(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.尾遞歸