Java 有人能给我解释一下这个程序的工作原理吗?

Java 有人能给我解释一下这个程序的工作原理吗?,java,function,recursion,stack,Java,Function,Recursion,Stack,我一直很想接触递归,但我似乎误解了它 我在一本书中读到一个问题,我有点困惑,我不想限制它,我想要一些关于函数调用的坚实的解释 class rectest { int values[]; rectest(int i) { values = new int[i]; } void printarray(int i) { if(i==0) return ; else printarray(i-1); System.out.print(valu

我一直很想接触递归,但我似乎误解了它

我在一本书中读到一个问题,我有点困惑,我不想限制它,我想要一些关于函数调用的坚实的解释

class rectest
{
int values[];

rectest(int i)
{
    values = new int[i]; 
}

 void printarray(int i)
  {
    if(i==0)
        return ; 
    else printarray(i-1);
    System.out.print(values[i-1]+" ");
  }
 }

public class recursion 
{
  public static void main(String args[])
   {
    rectest ob = new rectest(10);
    int i ; 
    for(i=0 ; i<10 ; i++)
        ob.values[i] = i ;
    ob.printarray(10);
   }
}
类rectest
{
int值[];
直接测试(int i)
{
值=新整数[i];
}
无效打印数组(int i)
{
如果(i==0)
返回;
else打印阵列(i-1);
系统输出打印(值[i-1]+“”);
}
}
公共类递归
{
公共静态void main(字符串参数[])
{
rectest ob=新的rectest(10);
int i;

因为(i=0;i递归意味着一次又一次地重复调用任何东西

这是一个传统而重要的学习计划 递归有效吗?是递归吗?为什么 让我举一个计算阶乘的例子 他们的伪代码是这样的

函数阶乘是:

input: integer n such that n >= 1
output: [n × (n-1) × (n-2) × … × 1]

    1. if n is >= 1, return [ n × factorial(n-1) ]
    2. otherwise, return 1

end factorial
现在这里发生的是,它总是返回[n*阶乘(n-1)],它一遍又一遍地调用自己

现在让我们考虑一下你的上下文

 public class recursion 
    {
      public static void main(String args[])
       {
        rectest ob = new rectest(10);
//在这里,您将初始化对象并调用其构造函数,并初始化大小为10的数组

int i ; 
for(i=0 ; i<10 ; i++)
    ob.values[i] = i ;

如果你有更多的查询问题,那就到此为止。

如果你必须了解递归,你可以看看这个堆栈溢出问题。


如果您想更好地理解java中递归的实现,这里还有另一个堆栈溢出问题。

您能指出您不懂的地方吗?输出是这样的..
0 1 2..
。我想了解这个输出,以及当执行
i==0
返回语句时会发生什么?这是一种嘲笑,你问的是stackoverflow的结果,而stackoverflow是他们为谁尝试的。或者具体一点,我不是在问结果。我可以得到o/p。我想要的只是它背后的概念:名词,参见“递归”,那么在i==0条件出现后,堆栈被清空,我们得到o/p?如果在if条件下查看printarray(int i)方法,它会检查并从else中退出,因为如果在该条件下,如果它转到else,它将printarray(-1)这是非法的,使得javaexoption或error-bothit基本上没有得到那个特定的位置
void printarray(int i)
  {
    if(i==0)
        return ; 
    else printarray(i-1);
//printarray(i-1) here it calls the method itself so as to print all the values recursively 
    System.out.print(values[i-1]+" ");
  }