日期:2014-05-20  浏览次数:20778 次

请教一个关于递归的问题
这事一个递归算法把十进制的数字转化为二进制的数字
public class TestDemo
{
public static void main(String[] args)
{
toBinary(10);
}
public static void toBinary(int num)
{
if(num == 0)
{
return;
}
toBinary(num /2);
System.out.print(num%2);
}

}
在运行到toBinary(num/2)这个方法时就一直调用递归
当num==0时,就返回到方法的调用处,打印语句System.out.print(num%2);
我觉得就不会输出,为什么,它能输出呢?
递归

------解决方案--------------------
当从递归出口返回的时候,便会执行打印语句
以10为例:
toBinary(10)
   toBinary(5)
      toBinary(2)
         toBinary(1)
            toBinary(0)
            System.out.print(1%2);
         System.out.print(2%2);
      System.out.print(5%2);
   System.out.print(10%2);
------解决方案--------------------
这个程序很明显的递归调用,最后一次是输入参数是0,这时候return ,没有输出,返回到上一层的调用方法就是输入参数是1,此时输出是1,;再返回上一层次输入参数是2,输出的是0;返回上一层次输入参数5,输出是1;返回上一层次输入参数是10,输出是0
这是这个程序的执行过程。递归调用需要很深入的理解栈的操作,这样可以理解更加透彻。