謝邀。簡(jiǎn)單說(shuō)說(shuō):
代碼僅一份
首先,遞歸函數(shù)的代碼在內(nèi)存中只需有一份,通常也只有一份。
其次,這樣的理解僅和編程語(yǔ)言的實(shí)現(xiàn)、及計(jì)算機(jī)體系結(jié)構(gòu)有關(guān),和遞歸無(wú)關(guān)。
數(shù)據(jù)有多份
以C為例,函數(shù)的實(shí)現(xiàn)代碼通常存放在TEXT段中,而該函數(shù)的每一次調(diào)用都會(huì)在堆棧段生成一套新的段框架(StackFrame),段框架中保存著本次調(diào)用的上下文、局部變量等信息,這一數(shù)據(jù)在函數(shù)返回時(shí)釋放。
若遞歸深度過(guò)大,堆棧空間不足以存放這許多次調(diào)用生成的數(shù)據(jù),就容易出現(xiàn)堆棧溢出故障。
小結(jié)一下:
遞歸調(diào)用時(shí):函數(shù)的代碼在內(nèi)存中只需一份;而函數(shù)運(yùn)行時(shí)的動(dòng)態(tài)數(shù)據(jù),可能有很多份。