杨辉三角用MATLAB编写

来源:百度知道 编辑:UC知道 时间:2024/06/29 01:54:06
function printyh(n)
% 打印杨辉三角形, 本函数没有输出参数
yh=1; disp(yh);
if n==1, return; end
yh=[1,1]; disp(yh);
for k=3:n
yh_old=yh; k2=ceil(k/2);
for l=2:k2
yh(l)=yh_old(l-1)+yh_old(l);
end
yh(k2+1:k)=yh(k-k2:-1:1); disp(yh);
end
最后几条的关键语句看不懂,请高手帮帮忙

他的意思就是说杨辉三角每一行的数值就是上一行两个元素相加得到的。yh_old就是上一行的元素,yh就是这一行,然后yh(l)=yh_old(l-1)+yh_old(l)就是这意思。
但因为杨辉三角是对称的,所以只要算一半就可以了,所以k2=ceil(k/2)而l=2:k2,也就是yh(l)只算到了k的一半。然后后一半只要用前一半对称过来就可以了,即yh(k2+1:k)=yh(k-k2:-1:1)。

以下是我对程序的改进:

程序是从第3行开始循环的,而前两行则直接定义了。但实际上只要定义第一行就可以了,第二行用下面的循环一样可以做出来。也就是说yh=[1,1]; disp(yh); 这一行可以去掉,然后把 k=3:n 换成k=2:n就可以了。然后if n==1, return; end 这一行也就不需要了,可以去掉。
原程序只算了前一半,后一半用对称实现,实际上完全可以用“每一行的数值就是上一行两个元素的和”这个关系把这一行全部算出来,也不用对称了,而且连循环都不需要。下面就是改进的程序:
function printyh(n)
% 打印杨辉三角形, 本函数没有输出参数
yh=1; disp(yh);
for k=2:n
yh=[yh,0]+[0,yh];
yh(k)=1;
disp(yh);
end