我一直试图弄清楚如何使用Matlab在矩阵中递归生成Pascal的三角形。 以下是它应该如何显示的示例:
>>PascalT(0)
ans =
1
>>PascalT(1)
ans =
0 1 0
1 0 1
>>PascalT(2)
ans =
0 0 1 0 0
0 1 0 1 0
1 0 2 0 1
>>PascalT(3)
ans =
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 0 2 0 1 0
1 0 3 0 3 0 1
到目前为止,我的代码很空,因为我无法弄清楚如何执行此操作:
function AA = PascalT(n)
if n == 0
AA = 0;
else
rec = PascalT(n-1);
AA = zeroes(n+1,2*n+1);
end
end
答案 0 :(得分:3)
为什么这需要递归?你知道三角形的每一行中有多少个数字,并且可以将矩阵循环到矩阵......
function AA = PascalT( n )
% Initialise matrix. Use 2n+3 cols so that we have additional 0s for edges
AA = zeros(n+1, 2*n + 3);
% First row...
AA(1, n+2) = 1;
% Loop over rows
for r = 2:n+1
% Create row r by adding left-shifted and right-shifted row above
AA(r, 2:end-1) = AA(r-1, 1:end-2) + AA(r-1, 3:end);
end
% Remove extra zeros on the edges
AA = AA(:, 2:end-1);
end
注意:有一个内置函数pascal
可以返回Pascal三角形(与你的相比旋转45度),你会发现它很有用。