是的,局部变量会新定义一次,不过仅局限于局部变量(全局变量和静态变量都是全局的,要是还没学暂时不用管)。
并不能说是“同时”,应该说是“同样”,时间上肯定是按照调用的先后顺序的。
递归确实会让程序变慢,但只是相对于不需要递归的等价代码。而且原因也不是内存分配导致的,而是因为函数调用产生的。
相反,会提高程序的运行效率,因为函数调用自身,所以是在同一块内存中调用运算的,会提高运行效率,并不会同时分配多个空间,因为当函数递归调用自身的时候,上一次的函数体已经执行完毕。有点类似循环,但是又不是循环。
每次递归的变量的作用域仅限当次递归所拥有,现在你是初学者不懂递归内在的原理是很正常的。当你学过数据结构的栈以后,你就会对递归有更深入一层的体会。