这周我的在线CS1课程的任务是创建一个程序,该程序使用多种方法来打印反向三角形。我创建了教授概述的方法,但发现自己完全陷入了以相反顺序打印递归的问题。起初,我根本无法掌握递归。似乎For循环可以用更少的抽象来完成相同的工作。在对该主题进行了更多的阅读之后,我觉得我对它是如何工作的有了更好的理解,不一定是为什么使用它。这就是我现在所拥有的:
public class RecursiveTriangle {
public static void main(String[] args) {
int sideLength = getLength();
String trianglePattern = getPattern();
printTriangle(sideLength, trianglePattern);
}
public static int getLength ()
{
Scanner scr = new Scanner(System.in);
System.out.print("Enter a number: ");
int sideLength = scr.nextInt();
return sideLength;
}
public static String getPattern()
{
Scanner scr = new Scanner(System.in);
System.out.print("Enter a character: ");
String trianglePattern = scr.nextLine();
return trianglePattern;
}
public static void printTriangle(int sideLength, String trianglePattern)
{
if (sideLength < 1){return;}
printTriangle(sideLength - 1, trianglePattern);
for (int i = 0; i < sideLength; i++)
{
System.out.print(trianglePattern);
}
System.out.println();
}
}
当前迭代以“正常”顺序打印出三角形。输入int(5)和String(“ AA”)会得出:
A
AA
AAA
AAAA
AAAAA
程序的最终迭代应为:
AAAAA
AAAA
AAA
AA
A
在这里,我将提供一些帮助。乐于阅读/观看有关递归的推荐材料,到目前为止,这是我发现的第一个具有挑战性的概念。
答案 0 :(得分:2)
说您的递归方法只是从n
开始倒数。
static void countDown(int n) {
if (n <= 0)
return;
countDown(n - 1);
}
要按递归顺序进行打印,请在递归调用之前插入打印语句:
static void countDown(int n) {
if (n <= 0)
return;
System.out.println(n);
countDown(n - 1);
}
输出
5
4
3
2
1
看,从5开始倒数。
要以反向打印,请在递归调用之后插入打印语句:
static void countDown(int n) {
if (n <= 0)
return;
countDown(n - 1);
System.out.println(n);
}
输出
1
2
3
4
5
看,向上计数,即倒计数。
答案 1 :(得分:0)
简单。只需颠倒print语句和printTriangle()
中的递归调用的顺序即可:
public static void printTriangle(int sideLength, String trianglePattern)
{
if (sideLength < 1){return;}
for (int i = 0; i < sideLength; i++)
{
System.out.print(trianglePattern);
}
System.out.println();
printTriangle(sideLength - 1, trianglePattern);
}
在Java中进行过测试:
答案 2 :(得分:0)
为了理解递归,首先必须了解递归。
真正了解递归的第一件事是这并不困难。递归方法的用例则相反:简化问题。
通过递归解决的经典问题是素数分解,阶乘,河内的塔楼等。与CS更为相关的可以是数据结构搜索/排序算法。
下面的freeCodeCamp article: "How recursion works - explained with flowcharts and a video"
是一个很好的起点致谢!
PD:很抱歉,这个问题超出了它本身,但是之前已经以无与伦比的简洁回答了。