Создание рекурсивной функции, генерирующей треугольник Паскаля (Matlab)

Я пытался понять, как рекурсивно генерировать треугольник Паскаля в матрице с помощью Matlab. Вот пример того, как это должно выглядеть:

 >>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

person Ezzataii    schedule 24.11.2017    source источник


Ответы (1)


Почему это должно быть рекурсивно? Вы знаете, сколько чисел в каждой строке треугольника, и можете просто прокрутить матрицу...

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, которая возвращает треугольник Паскаля (повернутый на 45 градусов по сравнению с вашим), который может оказаться полезным.

person Wolfie    schedule 24.11.2017
comment
Почему это должно быть рекурсивно? +1 - person Luis Mendo; 24.11.2017