我做了我认为是递归的例子。这可以接受吗?这不是一个项目或任何事情,我的教授是可怕的,所以我试着自学。
public void theCat() {
int i;
for (i = 0; i <= 50; i++) {
System.out.println(i);
if (i == 10) {
theCat();
}
}
}
答案 0 :(得分:7)
是的,这是递归。但是,它永远是无限的,因为你永远不会阻止它。
你应该做的是有一个基本案例,你可以检查是否是时候停止递归了。您还可以使用缩减步骤,将参数收敛到基本情况,如下所示:
public int theCat(int i) {
if (i => 50)
return i;
else
return theCat(i + 1);
}
为了证明这一点的有效性,请看一个递归因子方法:
private long factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
这里,基本案例检查我们是否正在尝试计算1!
,在这种情况下返回1
。在这种情况下,我们不再需要递归调用该方法。相反,我们沿着我们为计算最终答案所做的所有方法调用向后走:
factorial(5)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
return 1
return 2*1 = 2
return 3*2 = 6
return 4*6 = 24
return 5*24 = 120
答案 1 :(得分:0)
这会导致溢出。所有的递归都应该有某种基本情况可以退出,这样它就不会无限期地出现
此外,所有递归函数通常都会接收某种int或某些值,以便它们可以在基本情况下使用该值并退出。因此,对于您的示例,我会将int作为参数发送到cat并在i == 50
答案 2 :(得分:0)
是和否。从技术上讲,这是一个递归的例子。但这永远不会终止。通常会有一些参数传递给递归方法,以便它可以识别一个不会递归的“基本情况”。
答案 3 :(得分:0)
是的,但您必须拥有确定退出方法的标志,否则您会抓住StackOverFlowError
答案 4 :(得分:0)
这将导致堆栈溢出,因为递归调用是无限的。
我们可以用这种方式定义递归: 1.我们从一个具有特定状态的方法开始 2.在此方法内部调用方法本身,但调用会更改方法的状态 3.该方法具有基本情况(如果方法达到此状态,则不再递归调用自身的情况)。