这是一个相当快速的问题。我一直无法理解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);
}
}
}
答案 0 :(得分:4)
我更愿意在评论中这样做,但评论的格式化很难理解。您可以按照此递归进行操作,就好像它是一个数学方程式一样。
基本逻辑是:
DoSomething(n)导致:
因此,请关注doSomething(3)
所以现在我们必须弄清楚doSomething(2)做了什么,所以只需插入n = 2的值:
现在插入n = 1的值:
doSomething(0)是基本情况,递归停止。基本上doSomething(0)什么都不做。
因此,n = 1的动作变为
因此,n = 2的动作变为
因此,n = 3的动作变为
答案 1 :(得分:3)
答案 2 :(得分:0)
让我们在下面的代码中提供行号,以便进一步解释。
doSomething的第(n-1);
第1行重定向呼叫,直到您到达n = 1。在结束行中将调用doSomething(0)。因为n> 0,它将返回并将打印1.然后第3行将调用doSomething(0)并返回前一个调用者,即n = 2。 它将打印2并将调用doSomething(1)。这将打印1(121)并将返回n = 2,line3。从这里它将返回到前一个调用者,其中n = 3。第2行将打印3(1213)。然后第3行将调用doSomething(2),它将在前一次调用后追加121,最终将成为1213121。
我希望这会有所帮助。