2016-06-07 82 views
-3

該功能正常工作,但打印件具有倒三角形。遞歸 - 三角形在循環之前發出呼叫

的職能A anaylse:

public static int Triangle(int n) { 
    Random r = new Random(); 

    if (n == 1) 
     return r.nextInt(4) + 1; 

    for (int i = 0; i < n; i++) { 
     System.out.print(r.nextInt(4) + 1); 
    } 

    System.out.println(); 
    return Triangle(n - 1); 
} 
} 

輸出:

2224 
112 
11 
4 

我試圖把遞歸調用之前的for循環,這樣的結果應該是:

1 
11 
234 
4345 

但我得到一個編譯錯誤(for循環與它下面的紅線)。

錯誤運行後:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Unreachable code 

at test1.Triangle(test1.java:16) 
at test1.main(test1.java:6) 
+0

可達代碼意味着,你在寫代碼點,在那裏它不能被執行了,比如在一個'return'後面,不可能被執行。 – SomeJavaGuy

+0

請向你展示編譯時未解決的代碼。 –

+0

提示:如果你得到一個編譯錯誤...停止,不要跑,如果你已經知道它已經壞了,那麼運行某些東西是絕對沒有意義的,相反:fo因爲編譯器錯誤信息。轉向它指出的路線;然後繼續閱讀消息。因爲:通常這些錯誤消息是**真的很好。他們告訴你所有你需要知道的。 – GhostCat

回答

1

在遞歸函數,斷裂條件檢查,必須先遞歸調用,否則斷裂的回報將永遠不會達到。這聽起來很像你的代碼似乎做了什麼(你沒有發佈你的修改過的代碼,所以這是猜測)。

如果要反轉輸出,請嘗試將原始大小作爲附加參數傳遞,並使用它與您的差異作爲輸出長度。

... Triangle(int size, int n) 
... 
for (int i=0; i < (size-n+1); ++i) { ...} 
return Triangle(size, n-1); 

爲了保持接口的一致性(即確保size是從來沒有超過初始n較小,嘗試引入TriangleHelper這在開始時調用Triangle(size, size)