用matlab编写程序,用递归法和非递归法两种方法,生产如下的右螺旋n*n矩阵,规定方向右下左上右

img

你好同学,两个函数,供参考
(1)递归调用

function m = mySpiralOnes(n)
if(n==1)
    m = 1;
elseif(mod(n,4)==2) % 左
    m = zeros(n);
    m(:,n) = 1;
    m(1:n-1,1:n-1) = mySpiralOnes(n-1);
elseif(mod(n,4)==3) % 下
    m = zeros(n);
    m(n,:) = 1;
    m(1:n-1,2:n) = mySpiralOnes(n-1);
elseif(mod(n,4)==0) % 右
    m = zeros(n);
    m(:,1) = 1;
    m(2:n,2:n) = mySpiralOnes(n-1);
elseif(mod(n,4)==1) % 上
    m = zeros(n);
    m(1,:) = 1;
    m(2:n,1:n-1) = mySpiralOnes(n-1);
end
end

(2)循环

function m = mySpiralOnes2(ntot)%这里改成mySpiralOnes2为了方便放在一起验证 
m = 1;
for i = 1:ntot
    m1 = m;
    if(mod(i,4)==2) % 左
        m = zeros(i);
        m(:,i) = 1;
        m(1:i-1,1:i-1) = m1;
    elseif(mod(i,4)==3) % 下
        m = zeros(i);
        m(i,:) = 1;
        m(1:i-1,2:i) = m1;
    elseif(mod(i,4)==0) % 右
        m = zeros(i);
        m(:,1) = 1;
        m(2:i,2:i) = m1;
    elseif(mod(i,4)==1) % 上
        m = zeros(i);
        m(1,:) = 1;
        m(2:i,1:i-1) = m1;
    end
end
end

验证:

>> mySpiralOnes(5)

ans =

     1     1     1     1     1
     1     0     0     0     0
     1     0     1     1     0
     1     0     0     1     0
     1     1     1     1     0

>> mySpiralOnes2(5)

ans =

     1     1     1     1     1
     1     0     0     0     0
     1     0     1     1     0
     1     0     0     1     0
     1     1     1     1     0

可见两个程序都能运行出正确的结果
答题不易,有帮助还望题主给个宝贵的采纳支持一下答主答题哟,(づ ̄3 ̄)づ╭❤~