黑马程序员技术交流社区

标题: 写一个输出杨辉三角的程序 [打印本页]

作者: 柳雷    时间: 2012-7-25 08:19
标题: 写一个输出杨辉三角的程序
本帖最后由 柳雷 于 2012-7-25 12:32 编辑

杨辉三角:


作者: 柳雷    时间: 2012-7-25 08:28
本帖最后由 柳雷 于 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. }
复制代码
运行结果:


作者: 韩伟    时间: 2012-7-25 08:40
这个不是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("");
  }
}
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2