首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java递归从一个方法调用打印星号

Java递归从一个方法调用打印星号
EN

Stack Overflow用户
提问于 2013-04-23 08:12:29
回答 2查看 10.4K关注 0票数 0

我有一项任务是介绍Java中的递归,但我遇到了一个障碍。赋值需要一个递归方法,以根据传递给它的整数值输出多行、多个星号。例如,如果4作为变量n传入,则输出的第一行是一个星号,下一行是2个星号,接下来是3个星号,接下来是4,然后是4、3、2和1。

我已经完成了输出的前半部分(虽然不确定它是否是最优的),但不知道如何让方法反向向下。这一切都可以在一个方法调用中完成,并将一个变量(n)传递给该方法。

下面是我到目前为止使用的方法:

代码语言:javascript
复制
    public static void myMethod(int n)
    {       
    if (n <= 1) {
            System.out.print("*");          
    } else {
        myMethod(n - 1);
        for (int i = 0; i < n; i++) {
            System.out.print("*");
        }
    }

    System.out.print("\n"); // new line
    }

它是从main调用的,如下所示:

代码语言:javascript
复制
    myMethod(n);

所以我有一个for循环,它会在同一行上打印一个星号'n‘次。在for循环之后,它进入下一行并循环,更改n,但我不知道如何使其反转。

我的方法从该方法打印。我的讲师向我展示了一个示例版本,其中传递了2个变量(n)和一个空字符串。

代码语言:javascript
复制
    public static String myMethod(int n, String displayStr) {       
        String currentStr = "";

    for (int i = 0; i < n; i++)
        currentStr += "*";
        currentStr += "\n";

        if (displayStr == null){
            return myMethod((n - 1), currentStr);   
        } // end base case

        else if (n > 0){
            return myMethod((n - 1), (currentStr + displayStr + currentStr));
        }

        else {
            return displayStr;
        }
    } // end recursion method myMethod

他的版本使用以下代码行从main打印:

代码语言:javascript
复制
    System.out.println(myMethod(n, null));

我试过他的版本,它在它的边上打印三角形,但最大的线只打印一次,而不是两次。我花了一整天的时间试图修改他的,在中间添加一条重复的行,我开始认为这是不可能的。

任何帮助都将不胜感激。我对此完全停滞不前。

EN

回答 2

Stack Overflow用户

发布于 2013-04-23 08:19:04

将方法签名更改为public static void myMethod(int n, boolean reversed),其中reversed被初始化为false,但在打印n星号时将其反转为true。在方法内部,如果reversed为真,则反转您的逻辑。

票数 0
EN

Stack Overflow用户

发布于 2013-04-23 08:33:02

基本上,您只需要打印出当前行,然后执行递归调用,然后再次打印该行。这样,堆栈就会在向上堆积,然后在向下堆积。

下面是一个使用2个参数的例子,一个是最大长度,另一个是递归的迭代器。

代码语言:javascript
复制
// bootstrap method to start the recursion
public static void myMethod(int length)
{
    myMethod(length, length);
}

public static void myMethod(int length, int i)
{
    if (i > 0)
    {
        int rowLength = length - i + 1;

        printRow(rowLength, '*');

        myMethod(length, i - 1);

        printRow(rowLength, '*');
    }
}

public static void printRow(int length, char symbol)
{
    for (int i = 0; i < length; i++)
        System.out.print(symbol);
    System.out.println();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16158829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档