Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中的最大递归深度_Objective C_Recursion - Fatal编程技术网

Objective-C中的最大递归深度

Objective-C中的最大递归深度,objective-c,recursion,Objective C,Recursion,Objective-C的最大递归深度限制是什么?它几乎肯定取决于堆栈的大小。Objective-C或大多数语言中没有预设的最大递归深度 此外,在一个简单的测试中,你递归并计算错误发生的次数,但这也不能给你一个真实的答案,它可能会高估你在实际程序中所能达到的深度 只要堆栈上有足够的空间容纳正在调用的方法/函数的框架,就可以继续调用。帧包括各种内务管理信息(通常为固定大小)、保存寄存器(可变大小)和方法/函数的局部变量(可变大小)-因此没有单个帧大小 如果您想要一个粗略的近似值,您可以使用代码中出现

Objective-C的最大递归深度限制是什么?

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

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

此外,在一个简单的测试中,你递归并计算错误发生的次数,但这也不能给你一个真实的答案,它可能会高估你在实际程序中所能达到的深度

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

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


MacOSX本身对堆栈大小施加了一个上限,您可以使用
ulimit-s
为内核找到这个上限。另请参见此

是。我得到了一个异常…对不起,不是异常,而是一个EXC_BAD_access。当然,你有堆栈溢出。诀窍是保持递归级别的运行计数,并在每次递归调用函数时记录它。崩溃前的最后一个NSLog是您的答案。我不会记录它,只是等到它崩溃,然后询问调试器。通过日志记录,它应该在几分钟内崩溃,而不是几秒钟。