简单的递归计数器

时间:2013-11-10 12:00:21

标签: java recursion count

我有一个简单的递归java文件。代码如下

public class Rekursion_SA_UE {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    count(1, 10);
}

public static int count(int zahl, int max)
{
    if(zahl>max) return zahl;
    else{
        System.out.println(zahl);
        count(zahl+1, max);
        return zahl;
    }
}

输出为1,2,3,4,5,6,7,8,9,10。 如果我切换两行,则从10向下计数。它看起来像

 public class Rekursion_SA_UE {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    count(1, 10);
}

public static int count(int zahl, int max)
{
    if(zahl>max) return zahl;
    else{
        count(zahl+1, max);//switched
        System.out.println(zahl);//switched
        return zahl;
    }
}

这里的输出是10,9,8,7,6,5,4,3,2,1。 这是为什么? 提前谢谢。

2 个答案:

答案 0 :(得分:4)

这是因为当您输出count时与输出数字时相比。

在您的第一个版本中,您输出zahl 之前递归count,然后按顺序查看数字。这样的事情(我会停在4,而不是10):

count(1, 4)
    output 1
    count(2, 4)
        output 2
        count(3, 4)
            output 3
                count(4, 4)
                output 4
                    count(5, 4)
                    return
                return
            return
        return
    return

在你的第二个版本中,你在输出zahl之前递归,所以你一直进入你的递归(十个级别),然后当它开始放松时,你开始输出数字,最先是最深的(10)。喜欢的东西(我再次使用4,而不是10):

count(1, 4)
    count(2, 4)
        count(3, 4)
            count(4, 4)
                count(5, 4)
                    return
                output 4
                return
            output 3
            return
        output 2
        return
    output 1
    return

要理解这样的行为,请使用调试器并单步执行代码。在2013年,没有必要猜测代码在做什么。您可以观看它运行并准确查看正在发生的事情。

答案 1 :(得分:1)

它与递归的工作方式有关。它就像一棵树。你的第一个片段就像:

call(1)
    print(1)
    call(2)
        print(2)
        call(3)
            //etc.

你的第二个片段就像:

 call(1)
     call(2)
         call(3)
             //etc.
         print(3)
     print(2)
 print(1)