谢邀。简单说说:
首先,递归函数的代码在内存中只需有一份,通常也只有一份。
其次,这样的理解仅和编程语言的实现、及计算机体系结构有关,和递归无关。
以C为例,函数的实现代码通常存放在TEXT段中,而该函数的每一次调用都会在堆栈段生成一套新的段框架(StackFrame),段框架中保存着本次调用的上下文、局部变量等信息,这一数据在函数返回时释放。
若递归深度过大,堆栈空间不足以存放这许多次调用生成的数据,就容易出现堆栈溢出故障。
递归调用时:函数的代码在内存中只需一份;而函数运行时的动态数据,可能有很多份。