我有一个小任务,我必须生成一个pascal三角形,然后根据用户输入的行和列找到一个数字。这就是我想出的全部内容,我不知道如何继续计算给定行和列的数字。
import java.util.Scanner;
public class PascalTriangle {
public static void print(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(pascal(i, j) + " ");
}
System.out.println();
}
}
public static int pascal(int i, int j) {
if (j == 0) {
return 1;
} else if (j == i) {
return 1;
} else {
return pascal(i - 1, j - 1) + pascal(i - 1, j);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the row number");
int row = scanner.nextInt();
print(row);
}
}
答案 0 :(得分:0)
首先,你的代码会很慢。我不打算完成你的任务,但是你可以通过只知道前一个三角形来计算Pascal三角形的下一行,在每个单元格的恒定时间内,当你正在使用巨大的时候时间重新计算相同的值。
其次,对于您的实际问题,您可以查看formula of a cell in the Pascal Triangle。这不是正确的方法,但仍然可以作为在Pascal三角形上记录自己的起点。
使用此公式,您可以通过计算only its row来计算给定位置的数字。
修改
您最近的评论似乎指出不会计算某个位置的值,而是计算值的位置。事先,这样一个位置绝对没有单一性:几乎所有的值在三角形中至少出现两次,因为它是对称的。
但如果你想返回,例如在这些位置的字典顺序中,您可以逐个计算行(使用与显示三角形相同的方案),然后在获得所需值时立即停止。