跟踪Java的递归方法时遇到麻烦 - java

这是一个相当快速的问题。我一直在理解Java递归的概念时遇到麻烦,我想知道是否有人可以帮助我。我已经成功地跟踪了我完成的6种递归方法中的5种,但这实际上使我陷入了循环。我期望输出仅为2(跟踪的输出),但是当我将其放入编译器时,它的输出为1213121(正确的输出)。正如我说的,到目前为止,我已经能够做到这一点,但这使我感到困惑。这是我正在使用的:

public class Recursion
{
    public static void main(String [] args)
    {
        Recursion r = new Recursion();
        r.doSomething(3);
    }

    public void doSomething(int n)
    {
        if (n > 0)
        {
            doSomething(n-1);
            System.out.print(n);
            doSomething(n-1);
        }
    }
}

java大神给出的解决方案

我希望在注释中执行此操作,但是注释的格式使其难以遵循。您可以遵循此递归,就好像它是一个数学方程式一样。

基本逻辑是:

DoSomething(n)导致:

doSomething(n-1)
打印n
doSomething(n-1)

因此,让我们遵循doSomething(3)

doSomething(2)
打印3
soSomething(2)

因此,现在我们必须弄清楚doSomething(2)的作用,因此只需插入n = 2的值即可:

doSomething(1)
打印2
doSomething(1)

现在插入n = 1的值:

doSomething(0)
打印1
doSomething(0)

doSomething(0)是基本情况,递归在此停止。基本上doSomething(0)不会执行任何操作。

因此,n = 1的动作变为

打印1

因此,n = 2的动作变为

打印1
打印2
打印1

因此,n = 3的动作变为

打印1
打印2
打印1
打印3
打印1
打印2
打印1

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…

Java中的方法是否有“新”修饰符? - java

Java中是否有与C#'s new修饰符等效的符号?我想将其用于单元测试-每个init()方法都应标记为final,并使用@Before进行注释。然后,jUnit执行所有这些init()方法。我不想为每个init()方法都想出新的名字,我绝对想将它们标记为最终名称,以确保它们不会彼此覆盖(另一种模式是覆盖并调用super。每个init()方法的in…

无法在Eclipse中调试条件中的最后一条语句? - java

public static void main(String args[]) { if(true) { int x= 3*44+7; //int y=1; } } 我将问题缩小为这个简单的语句,我真的不知道如何在Eclipse调试器中访问此变量。它总是在以下情况下发生:在if条件中声明变量,try-catch语句,循环等,并且偶然地是该块中的最后一个语句。为…

用Java构建大批量数据处理工具 - java

Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。 3年前关闭。 Improve this question 我正在尝试使用Java构建ETL工具。 ETL工具用于对大量数据(关系型和其他类型)进行批量读取,…