前言

眾所周知,遞歸函數(shù)容易爆棧,究其原因,便是函數(shù)調(diào)用前需要先將參數(shù)、運(yùn)行狀態(tài)壓棧,而遞歸則會(huì)導(dǎo)致函數(shù)的多次無(wú)返回調(diào)用,參數(shù)、狀態(tài)積壓在棧上,最終耗盡??臻g

一個(gè)解決的辦法是從算法上解決,把遞歸算法改良成只依賴于少數(shù)狀態(tài)的迭代算法,然而此事知易行難,線性遞歸還容易,樹(shù)狀遞歸就難以轉(zhuǎn)化了,而且并不是所有遞歸算法都有非遞歸實(shí)現(xiàn)。

在這里,我介紹一種方法,利用CPS變換,把任意遞歸函數(shù)改寫(xiě)成尾調(diào)用形式,以continuation鏈的形式,將遞歸占用的??臻g轉(zhuǎn)移到堆上,避免爆棧的悲劇。
需要注意的是,這種方法并不能降低算法的時(shí)間復(fù)雜度,若是指望此法縮短運(yùn)行時(shí)間無(wú)異于白日做夢(mèng)

下文先引入尾調(diào)用、尾遞歸、

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式