其实你自己设个断点,自己走走看这个程序,不难发现他的脉络引用你的:【然后控制权就回到num = 1 的被调用函数中,】(注意,此时change(num / 2) ;这句结束,接下来函数会执行最后那句打印的)

解决方案 »

  1.   

    num=0的时候return到num=1的调用里,当然要打印那个1了,然后再继续往上返回啊。
      

  2.   

    这个程序有打印出来的吗?我怎么觉得不会输出啊,我试了也没输出。num=1除以2等于0的时候,进入if语句,方法结束了啊,是我没看你你说什么?
      

  3.   

    当程序执行到num = 0 的时候,就会走return,递归就结束了,然后就会依次走原先未执信打印语句,按反过来的顺序,先走num=1时的打印语句,打印1,依次
    num=2 0
    num=4 0
    num=9 1
    num=18 0 所以打印 10010
    明白了吗,LZ
      

  4.   

    会有的,num=1时除以2等于0进行递归,这个时候进入if执行return,但是注意此时return掉的是num=0时的方法,这时还有一个num=1的方法没有执行完,num=1的方法不会被return掉,所以会打印
      

  5.   

    函数进栈的顺序change(18) ->change(9)->change(4)->change(2)->change(1)->change(0)当num==0,return change(0)出栈,接着change(1)执行完默认return,一次类推