Objective-C 中的最大递归深度

Nic*_*rdu 4 recursion objective-c

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

CRD*_*CRD 5

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

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

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

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

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