为什么这个递归程序会给我这个输出?

时间:2017-04-05 12:33:16

标签: java recursion

我正在忙着研究java中的递归,并且很难理解它在大多数时候是如何工作的。我有一本书中的示例程序,他们要求您找到if n = 3的输出:

public void printX(int n){

    if(n <= 0)
        System.out.print(0);
    else{
        printX(n-1);
        System.out.print(n);
        printX(n - 2);

    }
}

我认为结果将是&#34; 231&#34;。然而,在将代码输入Eclipse并运行程序之后,结果变成了&#34; 010203010&#34;代码。

有人可以帮助我理解为什么这是输出而不是我的想法?

3 个答案:

答案 0 :(得分:2)

理解这种行为的最好方法是逐行逐步;你可以用调试器来做到这一点。

简短的回答:你认为它会首先打印2,因为当compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.google.android.gms:play-services-location:10.2.1' 为3时,首先要做的是调用n printX(n-1)。但当printX(2)n时,它会做什么?只打印2?不......首先调用2,这次是printX(n-1)。等等

答案 1 :(得分:0)

这里要注意的是调用函数将始终在被调用函数之后完成。每次调用printX时,调用函数都会暂停并等待,直到被调用的函数完成,然后再继续执行。思考它的一种方式是它是一种在彼此内嵌套函数的方法。

答案 2 :(得分:-1)

请按如下方式重写代码:

public void printX(int n){

    if(n >0)
        System.out.print(n);
         n--;
        printX(n)
    else{

        System.out.print(n);

        }
}