2014-02-21 50 views
-2

任何人都可以解釋這個遞歸程序如何工作。我試着運行這個程序,我得到了輸出:但我不理解程序的流程。遞歸如何工作?

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; 
     } 
    } 
} 
+5

得到一張紙和筆,在每次迭代中寫回值 – Baby

+3

調試器是你的朋友。 – Bathsheba

+0

System.out基本上是您的建議的數字版本。具有實際的價值似乎沒有幫助。 – Gimby

回答

1

下面是單步:

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" 

希望你現在明白了吧!

+0

但是隻有一個返回是可能的來電方法 – Venkatesh

+0

一個返回是可能的調用方法的一個實例,在這個例子中,方法「神祕」(我認爲這是你調用調用方法的方法)被調用3次,直到給定的字符串更小或等於3,然後每個返回一個該方法的實例。從主要方法我們只打一次這樣的 – kai

+0

? – Venkatesh

0

S1將採取first chars3將採取the last chars2將採取的第一個字符和最後一個字符之間的一切。那麼你正在檢查是否字符串length is less or equal 3或不, 如果是的話它將return s1,s2,s3作爲一個字符串否則 它將return D +神祕(s2)=「ELIVE」+ R。然後D +E + mystery(s2)="LIV" +E +R既然是三個字符將返回D +E + L + I + V +E + R

+0

第一次s1是D和第二次s1是E並且第二次時間s1是L並且第三次它將進入if循環,則它必須打印LIV – Venkatesh