while(1)无限循环和递归函数之间有什么区别?

6 operating-system

操作系统到底发生了什么?对于递归函数,可能是堆栈溢出和while(1)?如果我错了请纠正我?

cle*_*eek 14

递归函数会重复调用自身.无限循环将继续重复执行相同的代码.虽然这听起来非常相似,但实际效果却截然不同.每次调用方法时,变量都会被压入堆栈.当然,这意味着函数可以递归的次数存在固有的限制.因此,当你的无限循环将永远执行时,实际中的递归函数最终会耗尽堆栈空间,应用程序可能会停止运行.

  • +1实际提供有关堆栈的更多信息 (3认同)

Joe*_*oel 8

递归函数调用自身,将参数压入堆栈.这可能会永远持续下去,最终导致堆栈溢出.一些编译器可以优化它,基本上将递归函数转换为while循环 - 这称为尾递归.

while循环将简单地返回到顶部并重新使用相同的空间,因此它可以永远运行(至少直到电源熄灭:-))


Pho*_*shi 1

递归函数有一个子句,它不会调用自身,这意味着它结束。

  • 不完全正确。递归函数称其自身为句点。不需要有特殊的非递归子句。 (4认同)