采用递归实现九九乘法表

下面采用递归实现九九乘法表,这主要来自论坛上的一个帖子:

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(); } } }

你可能感兴趣的:(java算法,java)