??????之前看了許多關于遞歸的理解,還是是懂非懂的,這個問題一直糾結在心里。
????? 今天又碰到這個遞歸問題了,我認為一定要把問題分析清楚了,以后再遇到這樣的問題或者類似問題才能輕車熟路,不然又要頭疼或者成為問題的瓶頸了。
??????1)講到遞歸,我覺得先從函數說起,遞歸首先是一個函數,具有函數的一切功能,即寫一個遞歸要有函數的形式。比如 void function()。
??????2) 遞歸的定義,即遞推和回歸,即把一個大問題分成有限的小問題,并且通過這些小問題的解決,最后把大問題可以解決。
??????3)遞歸函數的格式,重要的是有個出口,即一個遞歸結束的條件,比如 if(btree->data=='#'),最后有個return 。
?????4)對遞歸的挖掘。遞歸實際是個棧的問題,而棧的特點是FILO,即先進后出。而每層棧保存了一個函數所具有的局部變量、函數返回地址,函數返回值等內容。這樣當遞歸返回時,這層棧便被銷毀,即這層棧的空間被釋放,函數調用進入到上層中。
???? 5)當遞歸結束時,便返回了調用該遞歸的地方處。
???? 6)可以把遞歸看成一個算法,很多問題要用到遞歸,比如樹。實際上算法的本質也是一個程序,這樣當看到本質時,算法就沒有那么嚇人了。
?????7)遞歸也有缺點,比如耗時間和空間,就像人類雖然很強大也有自身的缺點一樣,完美的存在只在于追求的過程和一顆平靜的心。
??????
?
????