采用递归实现九九乘法表
2011-06-03 13:46
183 查看
下面采用递归实现九九乘法表,这主要来自论坛上的一个帖子:
http://topic.csdn.net/u/20100918/12/840f7250-a300-455a-931f-9147a118ce15.html
解析:
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循环,就可以实现了,
如下:
或者
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(); } } }
相关文章推荐
- 二叉树采用二叉链表结构表示。设计并实现如下算法:后序递归建树,先序非递归遍历该树。
- 【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)
- 算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现
- C语言实现的快速排序,采用分治策略,递归实现
- 二叉树第K层叶子节点个数 -- 采用递归和非递归方法实现
- JAVA 采用递归方式实现求数组最大值
- 二叉树叶子节点个数计算 -- 采用递归和非递归方法实现
- 二叉树第K层的第M个节点 -- 采用非递归层次遍历实现
- C# 遍历文件夹非递归实现(采用队列的广度优先算法)(转)
- C#采用递归实现阶乘的方法
- 采用递归实现二值化图像连通区域的区域生长算法
- 通过斐波那契数列分析实现函数时采用递归和循环的利弊
- vbs 实现文件夹拷贝--采用堆栈不递归
- 采用递归实现下面的函数:1^2+2^2+3^3=14
- 自己写的关于实现数字阶乘的方法,一个采用普通方法,一个是采用递归
- 斐波拉契数列进行编译,采用三种不同的方法实现,迭代,递归,数组
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- django开源应用学校信息管理系统,采用django admin模块实现。
- 分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
- C语言经典算法(六)——递归实现字符串长度的两种方法