Java 递归将如何工作?

Java 递归将如何工作?,java,Java,有人能解释一下这个递归程序是如何工作的吗?我试着运行了这个程序,得到了输出:但我不理解程序的流程 MyCode: public class NewClass { public static void main(String args[]) { System.out.println("i am caller" + new NewClass().mystery("DELIVER")); } public String mystery(String s) {

有人能解释一下这个递归程序是如何工作的吗?我试着运行了这个程序,得到了输出:但我不理解程序的流程

MyCode

public class NewClass {
    public static void main(String args[]) {
        System.out.println("i am caller" + new NewClass().mystery("DELIVER"));
    }
    public String mystery(String s) {
        System.out.println("sssss" + s);
        String s1 = s.substring(0, 1);      
        String s2 = s.substring(1, s.length() - 1);   
        String s3 = s.substring(s.length() - 1);      
        if (s.length() <= 3) {          
            return s3 + s2 + s1;
        } else {           
            return s1 + mystery(s2) + s3;
        }
    }
}
公共类NewClass{
公共静态void main(字符串参数[]){
System.out.println(“我是呼叫者”+newnewclass().summary(“交付”);
}
公共字符串谜团(字符串s){
系统输出打印项次(“SSS”+s);
字符串s1=s.substring(0,1);
字符串s2=s.substring(1,s.length()-1);
字符串s3=s.substring(s.length()-1);

如果(s.length()s1将取
第一个字符
s3
将取
最后一个字符
s2
将取第一个字符和最后一个字符之间的所有字符。然后检查字符串
长度是否小于或等于3
, 如果是,它将
作为一个字符串返回s1、s2、s3

它将
返回
D+summary(s2)=“ELIVE”+R。然后
D+E+summary(s2)=“LIV”+E+R
由于它是三个字符,它将返回
D+E+L+I+V+E+R
以下是单个步骤:

mystery("DELIVER")
print "sssssDELIVER"
s1 = D
s2 = ELIVE
S3 = R
DELIVER.length <= 3 ?  -> no

     mystery("ELIVE")
     print "sssssELIVE"
     s1 = E
     s2 = LIV
     s3 = E
     ELIVE.length <= 3 ? -> no

         mystery("LIV")
         print "sssssLIV"
         s1 = L
         s2 = I
         s3 = V
         LIV.length <= 3 ? -> yes
         return VIL

     return E + VIL + E

return D + EVILE + R
print "i am callerDEVILER"
神秘(“交付”)
打印“SSS交付”
s1=D
s2=ELIVE
S3=R
交付长度编号
神秘(“艾利夫”)
打印“SSS Elive”
s1=E
s2=LIV
s3=E
艾利夫长度号
神秘(“LIV”)
打印“SSS LIV”
s1=L
s2=I
s3=V
丽芙:是的
回程线
返回E+VIL+E
返回D+E+R
打印“我叫德维尔”

希望你现在能理解它!

拿支笔和纸,在每次迭代中写下返回值调试器是你的朋友。System.out基本上是你建议的数字版本。但拥有实际值似乎没有帮助。我编写和打印的SOP也输出为:DEVILER根据我输出:VILStart以一个更简单的示例开始。p将其放入浏览器的控制台:
函数f(x){console.log(x);如果(x>0)f(x-1);}
然后用
f(8)调用它
第一次s1是D,第二次s1是E,第二次s1是L,第三次它将进入if循环,然后它必须打印liv,但只有一次返回到调用方方法,一次返回到调用方方法的一个实例,在本例中是方法“神秘”(我想这就是你调用调用方方法的方法)调用3次,直到给定的字符串小于或等于3,然后该方法的每个实例都有一个返回。从main方法我们只调用一次。是的,从main方法我们只调用它一次,但该方法一直使用较小的给定字符串调用自己,直到字符串小于或等于3为止。这就是所谓的递归。如果该方法不能调用自身,那么它就不是递归方法。第一次s2是:ELIVE,它不会进入if循环,第二次s2是:LIV,它将进入if块,它必须打印VIL,但它的打印ELIVE,它是怎样的?你能解释我吗。