Java 使用递归的说明 类RecTest { int值[]; 直接测试(int i) { 值=新整数[i]; } 虚空祈祷(int i) { 如果(i==0)返回; 其他的 { 系统输出println(+值[i-1]); 祈祷(i-1); } } } aka类 { 公共静态void main(字符串h[]) { RecTest ob=新的RecTest(10); int i; 对于(i=0;i

Java 使用递归的说明 类RecTest { int值[]; 直接测试(int i) { 值=新整数[i]; } 虚空祈祷(int i) { 如果(i==0)返回; 其他的 { 系统输出println(+值[i-1]); 祈祷(i-1); } } } aka类 { 公共静态void main(字符串h[]) { RecTest ob=新的RecTest(10); int i; 对于(i=0;i,java,recursion,Java,Recursion,而言,它正在改变您是在向下打印还是在向上打印。要么打印当前编号,然后再深入,要么再深入,然后打印当前编号 class RecTest { int values[]; RecTest(int i) { values=new int[i]; } void pray(int i) { if (i==0) return; else { System.

而言,它正在改变您是在向下打印还是在向上打印。要么打印当前编号,然后再深入,要么再深入,然后打印当前编号

class RecTest
{
    int values[];

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

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

class aka
{
    public static void main(String h[])
    {
        RecTest ob=new RecTest(10);
        int i;
        for(i=0;i<10;i++)
            ob.values[i]=i;
        ob.pray(10);
    }
}


当你走这一段的时候

3
print 3 >
         2
         print 2 >
                  1
                  print 1
切换它们,思考代码的进展

死刑进入祈祷阶段,但在它可以打印任何东西之前,它会再次被发送到祈祷阶段(这次是i=8),在它可以打印之前,它会再次被发送到祈祷阶段(i=7)

最后,在这个链条的深处,祈祷最终退出。当i=0时,祈祷返回,执行链开始放松

调用链中最低的打印(当i=0时),然后该方法退出,并调用链中的下一个打印(i=1)


像这样可视化递归代码有点困难,但是试着想象一下当您的方法第一次从main调用时的确切执行流程,然后一步一步地进行。此外,如果您仍然看不到发生了什么,使用调试器进行调试可能会有所帮助。

以这种方式编写的代码说“打印i-1,然后再打印其他所有数字”。所以它打印9,然后继续打印其他数字。在本文中,“打印其他所有数字”意味着打印8、7等等。但重要的是,9首先打印


但是如果你颠倒这两行代码,它会说“做其他的事情,然后打印i-1”。所以它处理其他数字,然后打印9。在这里,“处理“表示打印…,7,8。但重要的是,9最后才打印。

请对代码块使用一致的逻辑缩进。这对于帮助理解循环或递归代码尤其重要。谢谢。我以后会记住这一点。我是新手,刚开始,所以请不要介意。“所以请不要介意”这与问题有关,你应该注意它(就像在“修复”中一样)。事实上,我刚刚为你完成了编辑。请看理解程序工作原理的最佳方法是手动跟踪其执行过程:假设你是执行代码的计算机,并遵循它将采取的路径。+1-“…无论您是在下一层打印还是在上一层打印”。优秀、强大,但非常简洁的描述。
3
print 3 >
         2
         print 2 >
                  1
                  print 1
System.out.println(+values[i-1]);
pray(i-1);