当前位置: 首页 > 知识库问答 >
问题:

Java递归。。需要帮助了解递归案例的解决方案

洪昊然
2023-03-14

编写一个方法writeChars,该方法接受整数参数n,并按如下方式输出n个字符。输出的中间字符应始终为星号(“*”)。如果要求您写出偶数个字符,则中间会有两个星号(“**”)。在星号之前,您应写出少于个字符(“

我已经设法解决了这个问题,但不太明白一句话:

public void writeChars(int n) {
    if ( n < 1 ) {
        throw new IllegalArgumentException();
    }
    
    if( n == 1 ){
        System.out.print("*");
        return;
    }
    
    if ( n == 2 ) {
        System.out.print("**");
        return;
    }
    
    System.out.print("<");
    writeChars(n-2);
    System.out.print(">");
}

为什么是递归情况:

writeChars(n-2);

n-2?而不是n-1?

共有1个答案

归鹤龄
2023-03-14

对于每个递归调用,代码正好打印两个输出。因此,每次迭代的次数都应该减少两次。如果写入n-1,则打印的字符数将增加一倍。因此,我们必须在递归语句之前编写一条print语句,在递归语句之后编写一条print语句。

 类似资料:
  • 问题内容: 我正在尝试编写一种算法,以Java或Javascript创建合法的Sudoku板。两者都不起作用,我也不完全清楚为什么。 本质上,两个程序中的问题是x或y的增量都超过了其应有的幅度(跳过平方)。我一生无法弄清楚这是怎么发生的。如果需要,我可以提供完成JS解决方案的HTML。 我最好的猜测是它与我如何使用递归创建堆栈有关,但是据我所知,它 应该可以 工作。在我的旧代码中,有一个不正确的f

  • 问题内容: 我有一个Person类,我想创建一棵树。这是Person类的解释器。 c1是左边的孩子,c2是右边的孩子。所以说我创建了三个这样的人: 因此,在这里您说亚当是根节点,亚当的左孩子是b,这是芭芭拉,他的右c是卡尔,依此类推。 所以我想做的是编写一个count方法,该方法计算包括在内的子代数。因此a.count()将返回6(如果Person f没有任何孩子)。 这是我的代码: 我在纸上运行

  • 我很难理解以下函数的递归工作流程,以及它如何遍历排列排序数组。 让我感到困惑的一件特别的事情是“返回[nums[:]]”调用在递归函数中的行为。由于第9行再次调用自己,直到“start==2”,它什么时候继续执行第9行之后的行,以及它为哪个递归函数执行这些继续行? 抱歉,如果我的问题有点让人困惑,我最近才开始学习Python,希望更好地了解“return”调用在递归函数中的工作方式。任何建议都将不

  • 我试图通过记忆来解决“计数变化”的问题。 考虑下面的问题:我们可以用多少种不同的方式来换取1美元,半价、四分之一、二分硬币、五分硬币和五分硬币?更一般地说,我们可以编写一个函数来计算使用任何一组货币面额改变任何给定金额的方法的数量吗? 以及递归的直观解决方案。 使用n种硬币改变a的数量的方法数 除第一种硬币外,其他所有硬币都可以换成硬币的方法,加上 使用所有n种硬币改变较小数量a-d的方法的数量,

  • 问题内容: 这是情况。我有两个表: 用户(网站的注册用户), 消息(彼此之间发送的个人消息) 消息表具有以下列(仅是重要的列): ID, 发件人(发送消息的用户的ID), 发送消息的用户的接收者ID), reply_to(此消息要回复到的消息的ID,可以为NULL) 我需要做的是构造一个SELECT查询,该查询将选择2个用户之间的完整对话。即,如果用户A回复了从用户B发送的消息,而用户B回复了该消

  • 问题内容: 关于Mysql中的递归SELECT查询有很多问题,但是大多数答案是“ Mysql中没有递归SELECT查询的解决方案”。 其实有一定的解决方案,我想清楚地知道,所以这个问题是可以在(how-to-do-the-cursive-select-query-in- mysql )中找到的先前问题的以下内容 假设您有此表: &您想在col1中找到所有连接到值“ 1”的链接,即您要打印出: 然后