4

Objective-C 的最大递归深度限制是多少?

4

2 回答 2

5

Objective-C 或大多数语言中没有预设的最大递归深度。

此外,一个简单的测试,你递归并计算直到你出错的次数也不能给你一个现实的答案,它可能会高估你在真实程序中可以达到的深度。

只要堆栈上有足够的空间用于您正在调用的方法/函数的框架,您就可以继续调用。帧包括各种管理信息(通常是固定大小)、保存寄存器(可变大小)和方法/函数的局部变量(可变大小)——因此没有单一的帧大小。

如果您想要一个粗略的近似值,您可以声明一个函数,其中包含代码中出现的局部变量的平均数量和类型,并计算可以递归调用它的次数。这将为您提供正在运行的机器的近似值。

Mac OS X 本身对堆栈大小施加了上限,您可以使用ulimit -s. 另请参阅此Apple 文档

于 2012-05-04T09:41:45.263 回答
2

它几乎肯定取决于堆栈的大小。

于 2012-05-04T09:18:16.850 回答