这是输出Pascal三角形的一些代码,它显示了三角形的所有行。例如,如果用户输入为5,则输出如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我只想让它输出最后一行。所以对于5,只有1 4 6 4 1.我很难完成这个,虽然这很容易,但我知道。任何帮助表示赞赏。
import java.util.Scanner;
public class PascalsTriangle {
public static void computeRow(int n) {
int counter;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(pascalValue(i, j) + " ");
}
System.out.println();
}
}
public static int pascalValue(int i, int j) {
if (j == 0) {
return 1;
} else if (j == i) {
return 1;
} else {
return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Which line number of Pascal's Triangle? ");
int row = scanner.nextInt();
System.out.print("Line " +row+" of Pascal's Triangle:\n");
computeRow(row);
}
}
答案 0 :(得分:2)
更改您的computeRow()
方法,以检查您要打印的三角形的特定线条。在您的情况下,您只想打印最后一行,这将在外部for
循环的 last 迭代期间发生:
public static void computeRow(int n) {
int counter;
for (int i = 0; i < n; i++) {
// only output the line if it be the last one
if (i == n-1) {
for (int j = 0; j <= i; j++) {
System.out.print(pascalValue(i, j) + " ");
}
System.out.println();
}
}
}
public static void main(String[] args) {
computeRow(5);
}
<强>输出:强>
Line 5 of Pascal's Triangle:
1 4 6 4 1
答案 1 :(得分:0)
为什么还要有外部for循环?内部循环仅在i = n-1时执行。因此,您可以锁定i的值,即行索引(n),并使用如下递归函数:
for (int j=0; j<=n; j++) {
System.out.print(pascalValue(n, j) + " ");
}
顺便说一句,我不建议使用递归来找到给定索引处的Pascal值,而是使用它来建立行索引n,并使用for循环将Pascal值填充到一行。这样,您也可以使用动态编程并防止重叠。这就是JavaScript所需要的。
var getRow = function(rowIndex) {
if (rowIndex == 0) {
return [1];
}
else {
var row = [1];
previousLine = getRow(rowIndex - 1);
for (let i = 0; i < previousLine.length - 1; i++) {
row.push(previousLine[i] + previousLine[i + 1]);
}
row.push(1);
}
return row;
};