请告诉我如何确定递归的深度?我有两个递归函数的代码:
public class MyClass {
int ReccusionFunc1(int tmp0, int tmp1, int tmp2) {
return ReccusionFunc1(tmp0, tmp1, tmp2);
}
}
和
public class MyClass {
int ReccursionFunc2(int tmp0, int tmp1, int tmp2) {
int a = tmp0 + tmp1;
int b = tmp1 + tmp2;
int c = tmp2 + tmp0;
return ReccusionFunc2(a, b, c);
}
}
这两个无限递归中的哪一个将失败并出现错误StackOverflowError
早点?它可以通过分析计算还是定义?
答案 0 :(得分:3)
请告诉我如何确定递归的深度
传递一个参数,该值将在递归方法(ReccursionFunc1
或ReccursionFunc2
)的每次调用中增加。
这两个无限递归中的哪一个会因StackOverflowError错误而失败 早些时候
在堆栈上分配更多内存的那个,i.d。 ReccursionFunc2
。
是分析计算还是定义?
不,因为它取决于环境。
答案 1 :(得分:0)
在重复出现时输出计数器>。>
答案 2 :(得分:0)
设置全局计数器变量。在第一次重复呼叫之前初始化它。然后每次通话增加它。跳出循环语句时输出值。
OR
在调用循环方法之前初始化一个整数然后让你的循环方法将整数作为输入,递增并返回它(如果你需要返回多个东西将它放入一个包含其他东西的数组中) ,然后在最后输出。
如果无限递归循环是个问题。设置一个“上限”if if语句在任意上限中将进程从循环循环中断开。但是,这表明您的实施不正确,不应被视为“好”解决方案。例如,如果您正在尝试挖掘视图层次结构(iOS / android / etc),因为您不知道特定的superView在哪里。你会想要某种上限,因为层次结构可能是巨大的。您应该确切地知道您要查找的视图在层次结构堆栈中的位置,以便递归搜索它。
答案 3 :(得分:0)
为了确定递归的深度,您可以添加其他参数:
public class MyClass {
int ReccusionFunc1(int tmp0, int tmp1, int tmp2, int depth) {
return ReccusionFunc1(tmp0, tmp1, tmp2, ++depth);
}
new MyClass().ReccusionFunc1(1, 2, 3, 1);
public class MyClass {
int ReccursionFunc2(int tmp0, int tmp1, int tmp2, int depth) {
int a = tmp0 + tmp1;
int b = tmp1 + tmp2;
int c = tmp2 + tmp0;
return ReccursionFunc2(a, b, c, ++depth);
}
new MyClass().ReccursionFunc2(1, 2, 3, 1);