2013-03-25 116 views
-2

我开始学习递归以及如何使用它来解决问题。了解简单的递归方法

问题是,该方法调用重复(4)显示什么?

public static void recur (int n) 
{ 
    if(n==1) 
    { 
    System.out.print(n); 
    } 
    else 
    { 
    System.out.print(n); 
    recur(n - 1); 
    } 
} 

因为n不等于1时,它会再次发生(N - 1),但是这是我很困惑,这里是什么情况?输出是沿着3,2,1,0的线吗?

+6

你就不能调用'复发(4)'亲眼看看? – SudoRahul 2013-03-25 03:26:47

+0

正如@ R.J指出的那样,甚至更好,在运行时使用调试器遍历代码。 – 2013-03-25 03:27:16

+0

为什么不运行程序并检查输出的方式?乍一看,输出应该是4 3 2 1 – 2013-03-25 03:27:42

回答

1

它将打印:4321

如果你打电话recur(4),那么当你开始时,n == 4。它不是1,所以它转到else块,在那里它打印一个4,然后调用recur(3)(4-1 = 3)。之后,它仍然不是1,所以你再次去到else块。这次n == 3,所以3打印出来。然后调用recur(2),它再次进入else块,打印出2并调用recur(1)。现在n等于1,所以if块被执行,它只是打印1.

请注意,你得到4321,因为你有一个System.out.print()语句,没有空格。一个println()会把它放在一个新行,每次,你会得到:

4 
3 
2 
1 

但是随着print()语句,并没有间距,你会简单地得到4321

+0

谢谢,想知道这个,而不是只是“插入” – aiuna 2013-03-25 03:31:48

+0

@aiuna不客气。但是,如果您使用断点并在执行过程中看到这些值发生更改,那么对您而言就会更清楚。 – 2013-03-25 03:33:31