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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳雷 中级黑马   /  2012-7-25 08:19  /  1376 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 柳雷 于 2012-7-25 12:32 编辑

杨辉三角:

2 个回复

倒序浏览
本帖最后由 柳雷 于 2012-7-25 09:19 编辑

这是一个典型使用递归调用的例子
要知道第x行y列位置的元素,必须使用第x-1行第y-1列和第y列的元素相加得到,递归的结束条件是y=1或者y=x+1
所以就可以写出程序:
  1. public class Test {
  2. public static void main(String[] args)
  3. {
  4. int i,j,n=13;
  5. for(i=0;i<=n;i++) /*控制输出N行*/
  6. {
  7. for(j=0;j<24-2*i;j++)
  8. System.out.print(" "); /*控制输出第i行前面的空格*/
  9. for(j=1;j<i+2;j++)
  10. System.out.print(toFour(c(i,j))); /*输出第i行的第j个值*/
  11. System.out.print("\n");
  12. }
  13. }
  14. static int c(int x,int y) /*求杨辉三角形中第x行第y列的值*/
  15. {
  16. int z;
  17. if((y==1)||(y==x+1))
  18. return 1; /*若为x行的第1或第x+1列,则输出1*/
  19. z=c(x-1,y-1)+c(x-1,y); /*否则,其值为前一行中第y-1列与第y列值之和*/
  20. return z;
  21. }
  22. static String toFour(int s){//把数字转换成4个字符进行格式化输出
  23. String ss=""+s;
  24. if(ss.length()==1)ss=ss+" ";
  25. if(ss.length()==2)ss=ss+" ";
  26. if(ss.length()==3)ss=ss+" ";

  27. return(ss);

  28. }
  29. }
复制代码
运行结果:

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这个不是C吗,LZ是不是跑错地方了,还有这个我感觉不用递归也可以,可以申请一个int[n][n]的数组:
class Test
{
public static void main(String []args)
{
  YangHui(10);
}

public static void YangHui(int n)
{
  int arr[][] = new int[n][n];
  arr[0][0] = 1;
  arr[1][0] = 1;
  arr[1][1] = 1;
  for(int i=2;i<n;i++)
  {
   arr[0] = 1;
   arr = 1;
   for(int j=1;j<i;j++)
   {
    arr[j] = arr[i-1][j-1] + arr[i-1][j];
   }   
  }
  for(int i=0;i<n;i++)
  {
   for(int k=(n-i);k>0;k--)
     System.out.print("  ");
   for(int j=0;j<=i;j++)
   {
    System.out.print(arr[j]+"   ");
   }
   System.out.println("");
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马