java - 使用递归打印帕斯卡三角形
问题描述
我正在尝试开发一个使用递归打印出帕斯卡三角形的程序。这是我的代码:
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 252 210 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;
}
请注意,我们不会更改递归调用,因为如果我们这样做了,我们会说k
帕斯卡三角形的第 - 行取决于k-2
第 - 行,这是不正确的。
推荐阅读
- apache-kafka - 如何使用 Debezium (cdc) 将从 mysql 获取的更改接收到另一个 mysql db
- android - 使用 Android 导航组件拦截返回导航
- javascript - 在 Javascript 中绘图时导致更圆角的数字
- sql-server - CASE 语句使用存在?
- continuous-integration - 使用 PubSub 和 Google Scheduler 一致地部署 Cloudfunction
- ssl-certificate - Trifecta DataPrep 的 SSL 证书已过期
- java - REST 路径参数与资源路径冲突?
- javascript - 如何在 React 上处理没有 AJAX 调用的常规表单?
- excel - office.js 2mb 需求如何衡量?
- powershell - 从 .ps1 脚本设置环境变量值在 Github 操作中不起作用