反向打印递归

时间:2019-11-03 22:07:54

标签: java

这周我的在线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

在这里,我将提供一些帮助。乐于阅读/观看有关递归的推荐材料,到目前为止,这是我发现的第一个具有挑战性的概念。

3 个答案:

答案 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中进行过测试:

enter image description here

答案 2 :(得分:0)

为了理解递归,首先必须了解递归。

真正了解递归的第一件事是这并不困难。递归方法的用例则相反:简化问题。

通过递归解决的经典问题是素数分解,阶乘,河内的塔楼等。与CS更为相关的可以是数据结构搜索/排序算法。

下面的freeCodeCamp article: "How recursion works - explained with flowcharts and a video"

是一个很好的起点

致谢!

PD:很抱歉,这个问题超出了它本身,但是之前已经以无与伦比的简洁回答了。