public class  Multiply
{
/** 
* @param args 
*/ 
public static void main(String[] args) { 
method1(9);
}  public static void method1(int i) { 
if (i == 1) { 
System.out.print("1*1=1\t\n"); //当i=1后执行这句,可是执行完这句后为什么却是执行for循环
} else { 
method1(i - 1);     //总是循环直至i=1,这里明白
for (int j = 1; j <= i; j++) {   //执行完i==1后为什么会执行这里,if条件满足后不是不执行else了吗,而且i的值怎么会是2,并且会一直增加直至到9,i不是等于一吗,我晕了,请详解,谢谢
System.out.print(j + "*" + i + "=" + j * i + "\t"); 

System.out.println(); 


}

解决方案 »

  1.   

    递归调用就是一直做直到满足条件后再反方向来做,这样就先打印1*1=1 然后再1*2=2 2*2=4 一直到method(9)这样子
      

  2.   

    i开始是9,所以method1(i - 1); 会循环8次,最后i成为1,然后执行System.out.print("1*1=1\t\n"); 。输出后返回上一层,就是i=2的那层,这一层method1(i - 1); 已经执行过了,所以会执行它后边的for循环,循环完了后再返回上一层,就是i=3的那一层,这一层method1(i - 1); 同样也已经执行过了,所以会执行它后边的for循环,循环完了后再返回上一层,一直到i=9;希望你能看懂,呵呵,
      

  3.   

    for (int i = 1; i <=9; i++) { // i 控制行数,也表示乘数
         for (int j = 1; j <=i; j++) {      //  j 控制每行的输出个数,也表示被乘数
    // 格式化输出
    System.out.printf("%d*%d=%d\t", j,i,j*i);
        }
        System.out.println();
    }
      

  4.   

    楼主要搞清楚,程序执行的顺序,首先可以写个调用方法method1(1)这样肯定不会执行else,然而写的是method1(9),执行if判断不满足会执行else语句块。
      

  5.   

    method1(9);method1(int i)for (int j = 1; j <= i; j++) 
      

  6.   

    递归就是一个不断地入栈的过程,你从9*9=81,8*9,7*9………………一直压入栈中到1*1。最后才pop出来(出栈),所以输出地结果就是到过来的:1*1,……,7*9,8*9,9*9。
      

  7.   

    package test;public class Multiply {

    public static void method1(int num) {
    if (num <= 0) return;
    method1(num-1);
    for (int i =1; i <= num; i ++) {
    System.out.print(num+"X"+i+"="+(i*num) + "  ");
    }
    System.out.println();

    }

    public static void main(String[] args) {
    method1(9);
    }
    }
    结果:
    1X1=1  
    2X1=2  2X2=4  
    3X1=3  3X2=6  3X3=9  
    4X1=4  4X2=8  4X3=12  4X4=16  
    5X1=5  5X2=10  5X3=15  5X4=20  5X5=25  
    6X1=6  6X2=12  6X3=18  6X4=24  6X5=30  6X6=36  
    7X1=7  7X2=14  7X3=21  7X4=28  7X5=35  7X6=42  7X7=49  
    8X1=8  8X2=16  8X3=24  8X4=32  8X5=40  8X6=48  8X7=56  8X8=64  
    9X1=9  9X2=18  9X3=27  9X4=36  9X5=45  9X6=54  9X7=63  9X8=72  9X9=81  
      

  8.   

    上面的数字好像有点反了,有X的那行改为 System.out.print(i+"X"+num+"="+(i*num) + "  ");