您的位置:首页 > 其它

采用递归实现九九乘法表

2011-06-03 13:46 183 查看
下面采用递归实现九九乘法表,这主要来自论坛上的一个帖子:
http://topic.csdn.net/u/20100918/12/840f7250-a300-455a-931f-9147a118ce15.html
public class MultiTable{
public static void main(String args[]) {

method1(9);

}

/**
* 打印出九九乘法表
* @param i
*/
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.递归就是一个不断地入栈的过程,你从9*9=81,8*9,7*9………………一直压入栈中到1*1。最后才pop出来(出栈),所以输出地结果就是到过来的:1*1,……,7*9,8*9,9*9。

总结:其实递归的效率是比较低的,所以对于本题,建议采用for循环,就可以实现了,

如下:

/**
* 打印出九九乘法表
* @param n
*/
public static void method2(int n){
for (int i = 1; i <=n; i++) { // i控制行数,也表示乘数
for (int j = 1; j <=i; j++) { // j 控制每行的输出个数,也表示被乘数
// 格式化输出
System.out.printf("%d*%d=%d/t", j,i,j*i);
}
System.out.println();
}
}


或者

/**
*一个for循环打印九九乘法表
*/
public static void getMultiTable(int n) {
for (int i = 1, j = 1; j <= n; i++) {
System.out.print(i + "*" + j + "=" + i * j + " ");
if (i == j) {
i = 0;
j++;
System.out.println();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐