Java 递归将如何工作?
有人能解释一下这个递归程序是如何工作的吗?我试着运行了这个程序,得到了输出:但我不理解程序的流程 MyCode: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) {
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,它是怎样的?你能解释我吗。