2016-06-07 75 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)