Java打印功能输出的说明

时间:2013-09-24 08:35:46

标签: java recursion

  static void print(int i){
        if( i > 1){
            System.out.print("Y");
           print(i-1);
        }
        for(int t = 0; t < i ; t++){
            System.out.print(i);
        }
    }

此代码具有以下输出; YY122333,附印刷品(3);

但是,我不明白为什么。为什么函数从打印1开始呢?难道它首先通过if函数然后打印Y然后是一个实体2?

中号

6 个答案:

答案 0 :(得分:2)

这是你的序列:

i = 3, call print(3-1)

    i = 2, call print(2-1)

        i = 1, don't call print as 1 > 1 == False
        for (int t=0; t<1; t++) prints '1'

    for (int t=0; t<2; t++) prints '2' two times

for (int t=0; t<3; t++) prints '3' three times

当代码看起来很奇怪时,在像Eclipse这样的IDE中使用调试器逐步执行代码总是有帮助的,并且观察变量会发生变化。

答案 1 :(得分:2)

你的algrothym是递归的。如果你遵循这个陈述的逻辑你有

static void print(int i){
    if( i > 1){
        System.out.print("Y");
       print(i-1);
    }
    for(int t = 0; t < i ; t++){
        System.out.print(i);
    }
}

Call print(i==3)
i > 1 -> TRUE
Prints Y
Call print (i==2)
    i > 1 -> TRUE
    Prints Y
    Call print (i==1)
        i > 1 -> FALSE
        t = 0, t < 1 -> true
        print 0
        t = 1, t < 1 -> false
        return 
    t = 0, t < 2 -> true
    print 0
    t = 1, t < 2 -> true
    print 1
    t = 2, t < 2 -> false
    return
t = 0, t < 3 ->
and so on. 

希望这有帮助

答案 2 :(得分:1)

你创建了一种特殊类型的函数,称为递归函数,这意味着函数会自行调用。

因此,当您第一次调用它时(参数大于1,我猜你的情况是3),它会打印Y然后再次调用print函数作为参数i-1 (2)

因此,它再次出现在函数中,评估条件,并且,i>1再次调用自身,并以1为参数。

它再次进入内部,但这一次不同,第一个条件是假的,它会跳转到一次打印1的for循环。

然后该函数恢复,调用函数将在我们离开的地方收回(你记得,它与2作为参数的功能相同)。所以它进入循环,打印2两次并恢复......

...以函数3作为参数进行第一次调用。所以它进入循环并打印3三次。

然后执行将恢复到第一个名为print函数的任何函数

答案 3 :(得分:0)

不,代码有递归调用。该函数在函数体中调用自身:print(i-1)

答案 4 :(得分:0)

不,它不会。它叫做递归。当它找到一个参数i > 1时,它会调用自己,等待该方法完成(打印其他所有内容),然后继续。

答案 5 :(得分:0)

Iteration   Step                        info                Output

1           enter print function        i==3
1           if (i>1)                    3 > 1 == true
1           System.out.print("Y")                           Y
1           call print functin with i-1 i - 1 == 2
2           enter print function        i==2
2           if (i>2)                    2 > 1 == true
2           System.out.print("Y")                           YY
2           call print function with i-1    i - 1 == 1
3           enter print function        i==1
3           if (i>1)                    1 > 1 == false
3           for (t=0; t<i; t++)         t==0; 0 < 1 == true
3           System.out.print(i)                             YY1
3           for (t=0; t<i; t++)         t==1; 1 < 1 == false
3           end iteration
2           for (t=0; t<i; t++)         t==0; 0 < 2 == true
2           System.out.print(i)                             YY12
2           for (t=0; t<i; t++)         t==1; 1 < 2 == true 
2           System.out.print(i)                             YY122
2           for (t=0; t<i; t++)         t==2; 2 < 2 == false
2           end iteration   
1           for (t=0; t<i; t++)         t==0; 0 < 3 == true
1           System.out.print(i)                             YY1223
1           for (t=0; t<i; t++)         t==1; 1<3 == true
1           System.out.print(i)                             YY12233
1           for (t=0; t<i; t++)         t==2; 2<3 == true
1           System.out.print(i)                             YY122333
1           for (t=0; t<i; t++)         t==3; 3<3 == false
1           end iteration