这是递归的正确用法吗?

son*_*han 4 java recursion

我做了我认为是递归的一个例子.这可以接受吗?这不是一个项目或任何事情,我的教授是可怕的,所以我试着自学.

public void theCat() {
  int i;
  for (i = 0; i <= 50; i++) {
    System.out.println(i);
    if (i == 10) {
      theCat();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*son 7

是的,这是递归.但是,它永远是无限的,因为你永远不会阻止它.

你应该做的是有一个基础案例,你检查是否是时候停止递归.您还可以使用缩减步骤,将参数收敛到基本情况,如下所示:

public int theCat(int i) {
    if (i => 50) 
        return i;
    else
        return theCat(i + 1);
}
Run Code Online (Sandbox Code Playgroud)

为了证明这一点的有效性,请看一个递归因子方法:

private long factorial(int n) {
    if (n == 1)
        return 1;
    else
        return n * factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)

这里,基本案例检查我们是否正在尝试计算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
Run Code Online (Sandbox Code Playgroud)