以相反顺序打印递归

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

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


叮当猫咪
浏览 103回答 3
3回答

呼如林

假设你的递归方法只是从 开始倒数n。static void countDown(int n) {&nbsp; &nbsp; if (n <= 0)&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; countDown(n - 1);}要按递归顺序打印,请在递归调用之前插入打印语句:static void countDown(int n) {&nbsp; &nbsp; if (n <= 0)&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; System.out.println(n);&nbsp; &nbsp; countDown(n - 1);}输出54321看,从 5 开始倒数。要反向打印,请在递归调用后插入打印语句:static void countDown(int n) {&nbsp; &nbsp; if (n <= 0)&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; countDown(n - 1);&nbsp; &nbsp; System.out.println(n);}输出12345看,向上计数,即向下计数的相反过程。

慕容3067478

为了理解递归,首先必须理解递归。首先要真正理解递归,它应该不难。递归方法的用例相反:简化问题。递归解决的经典问题有素因数分解、阶乘、汉诺塔等。与CS比较相关的可以是数据结构搜索/排序算法。

ITMISS

简单的。只需颠倒 print 语句和递归调用的顺序即可printTriangle():&nbsp; &nbsp; public static void printTriangle(int sideLength, String trianglePattern)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (sideLength < 1){return;}&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < sideLength; i++)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.print(trianglePattern);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; System.out.println();&nbsp; &nbsp; &nbsp; &nbsp; printTriangle(sideLength - 1, trianglePattern);&nbsp;&nbsp; &nbsp; }在 Java 中测试:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java