我正在尝试开发一个使用递归打印出Pascal三角形的程序。这是我的代码:
public class PascalTriangle {
public static int[] computePT(int k) {
int [] pt = new int [k+1];
if (k == 0) {
pt[0] = 1;
return pt;
}
else {
int [] ppt = computePT(k-1);
pt[0] = pt[k] = 1;
for (int i=1; i<ppt.length; i++) {
pt[i] = ppt[i-1] + ppt[i];
}
}
return pt;
}
}
public class PascalTriangleDriver {
public static void main(String args[]) {
int k=10;
int arr[] = PascalTriangle.computePT(k);
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
}
该代码运行完美,但是我的问题是我想修改我的PascalTriangle代码(而不是PascalTriangleDriver代码),例如,当k = 10时,它会打印出:
1 9 36 84 126 126 84 36 9 1
代替:
1 10 45 120 210 252210 120 45 10 1
您似乎犯了一个1错误。解决此问题的一种简单方法是编写另一种方法,该方法使用调用您的原始方法k-1
:
// this is your original method, just renamed:
private static int[] computePTImpl(int k) {
int [] pt = new int [k+1];
if (k == 0) {
pt[0] = 1;
return pt;
}
else {
int [] ppt = computePT(k-1);
pt[0] = pt[k] = 1;
for (int i=1; i<ppt.length; i++) {
pt[i] = ppt[i-1] + ppt[i];
}
}
return pt;
}
// you will call this method:
public static int[] computePT(int k) {
return computePT(k - 1);
}
另外,您实际上可以通过将k
s 替换为s 来修复代码k-1
:
public static int[] computePT(int k) {
int [] pt = new int [k]; // note the change
if (k == 1) { // note the change
pt[0] = 1;
return pt;
}
else {
int [] ppt = computePT(k-1);
pt[0] = pt[k - 1] = 1; // note the change
for (int i=1; i<ppt.length; i++) {
pt[i] = ppt[i-1] + ppt[i];
}
}
return pt;
}
请注意,我们不会更改递归调用,因为如果这样做,我们会说Pascal三角形的第k行取决于第(k-2)行,这是不正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句