我在尝试将正确的数字放在正确的位置时遇到了困难,我的想法似乎是正确的,但打印是错误的。
static int plotTri1(int n, int i) {
if (n > 0) {
plotTri1(n - 1, n + i);
i += n;
for (; 0 < n; n--) {
System.out.printf("%3d", (i--));
}
System.out.println();
}
return n;
}我当前的解决方案打印出以下内容:
Given n = 5 and i = 0
15
14 13
12 11 10
9 8 7 6
5 4 3 2 1所需的解决方案是:
Given n = 5 and i = 0
1
3 2
6 5 4
10 9 8 7
15 14 13 12 11寻找将引导我找到所需解决方案的帮助
发布于 2018-03-09 11:19:15
为什么要使用递归函数?
static void plotTri2(int n) {
int k=1 ;
for (int i=0; i<n; i++) {
for (int j=0; j<=i; j++) {
System.out.printf("%3d", new Object[] {new Integer(k-j)} );
}
k+= i+2 ;
System.out.println("");
}
}plotTri2(5);
发布于 2018-03-09 11:13:07
这是一种对我有效的方法。其基本思想是递归地从每一行中的起始数字到该行中的最后一个数字进行打印。
public static void triangle(int n, int num) {
if (n == 0) return;
triangle(n - 1, num - n);
System.out.println("\n");
for (int i=0; i < n; ++i) {
if (i > 0) System.out.print(" ");
System.out.print(num - i);
}
}
public static void main(String args[]) {
triangle(5, 15);
}

Demo
发布于 2018-03-10 23:07:39
让前一个调用返回一些东西怎么样?这里有一个想法:
static int[] f(int n){
if (n == 0){
int[] firstRange = new int[]{1,1};
return firstRange;
}
int[] range = f(n - 1);
for (int i=range[0]; i<=range[1]; i++) {
System.out.printf("%3d", i);
}
System.out.println();
int[] nextRange = new int[]{range[1] + 1, 2 * range[1] - range[0] + 2};
return nextRange;
}https://stackoverflow.com/questions/49185845
复制相似问题