A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小丑 中级黑马   /  2013-1-27 18:24  /  2402 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天在一习题集上看到一个题:利用for循环打印 9*9 表?  咋一看感觉很简单,可是想了很久老感觉有点问题,以下是那习题集的参考答案,求高手给出其它的方法,我主要是想知道能不能用递归?多谢

用for循环打印 9*9  表?

1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

1*4=4  2*4=8  3*4=12  4*4=16

1*5=5  2*5=10  3*5=15  4*5=20  5*5=25

1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36

1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49

1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64

1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81



//循环嵌套,打印九九乘法表

public class NineNine{

public static void main(String[]args){

System.out.println();

for (int j=1;j<10;j++){

for(int k=1;k<10;k++) {   //判断语句里的 k<=j,省去下列的if语句。

if (k>j) break;       //此处用 continue也可以

System.out.print(” “+k+”X”+j+”=”+j*k);

}

System.out.println();

}

}

}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

4 个回复

倒序浏览
一切皆有可能,下面是我写的代码,你凑合着看吧。
public class Test13 {
/**
  *小提示:递归函数运行效率很低,递归多次容易造成栈溢出,
  *一般情况下不建议用递归函数。
  */

public static void main(String[] args) {
  // TODO Auto-generated method stub
  Test13 test = new Test13();
  //test.print1(20);
  //test.print1(9);
  test.print2(1);
}

//倒序打印:此函数的下限是1,上限可以自定义,但要打印出上限超出9的乘法表,
//需要将函数中的第一个if语句注释掉。
public void print1(int num)
{
  if(num>9||num<0)
  {
   System.out.println("超出9*9乘法表的表示范围,程序结束!");
   return;
  }
   
  if(num==0)
   return;
  for(int i=1;i<=num;i++)
  {
   System.out.print(i+"*"+num+" = "+(i*num)+" \t");
  }
  System.out.println();
  print1(--num);
}


//正序打印,此函数可以从下限(1~9)开始打印,上限是9,
//上限可以通过if语句进行调整。
public void print2(int num)
{
  if(num>9||num<=0)
  {
   System.out.println("程序结束!");
   return;
  }

  for(int i=1;i<=num;i++)
  {
   System.out.print(i+"*"+num+" = "+i*num+" \t");
  }
  System.out.println();
  num++;
  print2(num);
}
}
回复 使用道具 举报
  1. /*
  2. 要求:用控制台程序输出九九乘法表
  3. 思路:
  4. 1.定义乘法左右x和y两个数的变量,先给第二个数循环加9次
  5. 2.再根据第二个数,控制第一个数每次的循环次数,输入方式采用不换行方法。内循环方式是关键,每次循环完成要重新将第一个数重置为1,使其每次从1开始。
  6. 3.结尾增加换行符,用来调整好输出的效果。
  7. 4.循环要已乘法第二个数为总循环体,因为这个数每行中保持不变。
  8. */

  9. class HelloWorld
  10. {

  11.         public static void main(String[] args)
  12.         {
  13.                
  14.                 int x,y; //设定乘法两边数的变量
  15.                 x = y = 1 ;
  16.                 while(y<=9)//外部设定9次大循环
  17.                 {
  18.                         while(x<=y)//根据循环值进行小循环的次数的设定
  19.                         {
  20.                                 System.out.print(x+"*"+y+"="+x*y+"\t"); //用\t制表符使内部垂直对齐
  21.                                 x++;
  22.                         }
  23.                         y++;
  24.                         x = 1;//关键设置,每次把x值重置为1,从头开始。
  25.                         System.out.println("");

  26.                 }
  27.                
  28.         }


  29. }
复制代码
回复 使用道具 举报
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出

楼主考虑下:如果用递归的话,等于要在栈空间里重复开辟空间,
如果用for循环的话,只用开辟几个空间,只是空间里的值不断在变化.
回复 使用道具 举报
其实开始写出伪代码和程序思路给大家看看更好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马