使用队列循环实现杨辉三角

杨辉三角的简单定义:杨辉三角,是二项式系数在三角形中的一种几何排列。
杨辉三角的简单性质:每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
第n行的数字有n项。
第n行数字和为2n-1。
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。
将各行数字相排列,可得11的n-1(n为行数)次方:1=11^0; 11=11^1; 121=11^2……当n>5时会不符合这一条性质,此时应把第n行的最右面的数字"1"放在个位,然后把左面的一个数字的个位对齐到十位... ...,以此类推,把空位用“0”补齐,然后把所有的数加起来,得到的数正好是11的n-1次方。以n=11为例,第十一行的数为:1,10,45,120,210,252,210,120,45,10,1,结果为 25937424601=1110。

杨辉三角的性质对其程序的编写有着很大的作用,了解性质后就可以对其在java语言中的应用进行深化理解。
关键代码分析:

首先需要输入行数,在输入行数值i前,先输入入队操作,因为作为最底部的1,可以看作是0+1,则输入 s.enqueue(0)、s.enqueue(1),再输入:int x = s.dequeue(); int y = s.frontqueue()访问最先入队的底部元素,以及计算出队的元素,再由for (int j = 0; j < 2 * (n - i); j++) System.out.print(" ");
} else
System.out.print(x + " ");
来循环出值。

杨辉三角规则使用:
队头、队尾元素值为1
当前数=上一个数+上一个数的前一个数
这个规则对应到代码上就比较好实现了,先定义front和rear,输入队列长度的循环上限:
private int front, rear;
public SeqQueue(int length) {
if (length < 64)
length = 64;
this.element = new Object[Math.abs(length)];
this.front = this.rear = 0;
之后需要对每一行的元素进行赋值,根据先前输入的队列行值,进行循环。

使用debug调试时在length处设置结点,进行调试

单步追踪程序排队:

杨辉三角同样可以通过简单的数组循环来实现,这样就比较基础,通过队列来循环可以在杨辉三角的编译过程中使用元素的赋值和前后元素的相关性来检验本章关于队列的学习,使用队列循环来调试同样可以更好地理解杨辉三角的循环方法和基本规则。

posted @ 2017-10-21 20:38  邢天岳  阅读(3267)  评论(0编辑  收藏  举报