public class NextNum {    private static long num = 1;    public static void PrintN(long num) {
        if (num > 1) {
            PrintN(num - 1);
        }
        System.out.print(num + " ");
        
    }    public static long getNum() {
        return num;
    }    public static void setNum(long n) {
        num = n;
    }
}

解决方案 »

  1.   

    你把输出写在递归后面,那就要先递归完才能输出,递归结束是num=1的时候,然后执行输出,在返回再输出,一次类推。
      

  2.   

    public static void PrintN(long num) {
            if (num > 1) {
                PrintN(num - 1);
            }
            System.out.print(num + " ");
            
        }
    /*
    这段代码的执行情况:
    当num = 2;
        进行判断: if (num > 1) {PrintN(num - 1); }
        这个时候,我们发现num=2>1,所以其会执行 PrintN(num - 1);
         而不会跳到下面去执行 System.out.print(num + " ");
        所以程序会执行 PrintN(2-1); 相当于 PrintN(1);
        进行判断:   if (num > 1) {PrintN(num - 1); }
        系统发现num>1 不成立,所以不会执行下面的代码块,转而执行下面的
        System.out.print(num + " ");
        这个时候,就会输出1.
        随后,执行完if(){ }里面的语句,程序就会执行下面的 
        System.out.print(num + " ");
        就会打印出2.
    */
      

  3.   

    先执行if 判断,因为判断始终成立直到 num递归成1 时判断不成立 然后执行当前判断语句之后的 语句,执行完成后返回上层 ,所以首先打印的时1,然后 2,3,4,....,num ,要打印n到1,把打印语句写在递归之前就行了,先打印当前数字再执行递归。if (num>=1){
    System.out.print(num + " ");
    PrintN(num-1);
    }