Я думаю, что вы пытаетесь сделать рекурсию двоичного дерева. Трудно дать хорошее решение, не зная больше о проблеме, особенно не зная, что вы хотите получить в результате этого процесса.
Я поднял это, чтобы привести пример того, как вы могли бы сделать это. Это не обязательно самый эффективный, потому что он хранит все результаты на каждом этапе. Учитывая входную матрицу A, она вычисляет 2-выходную функцию [B, C] = MyFunction(A)
и ищет либо isequal(A, B)
, либо isequal(A, C)
. Когда это происходит, он выводит глубину дерева в этой точке, то есть сколько итераций должно было произойти до повторения. Бит с глобальными переменными просто для того, чтобы я мог сделать простой пример с легкой фиксированной точкой (k-я итерация просто A ^ k). Это будет повторяться максимум 10 раз.
function depth = myRecursor(A)
global A_orig;
A_orig = A;
depth = 1;
max_depth = 10;
pvs_level = cell(1);
pvs_level{1} = A;
while depth < max_depth,
this_level = cell(2*length(pvs_level), 1);
for ix = 1 : length(pvs_level),
[B, C] = MyFunction(pvs_level{ix})
if isequal(B, A) || isequal(C, A),
return;
end
this_level{2*ix - 1} = B;
this_level{2*ix} = C;
end
depth = depth + 1;
pvs_level = this_level;
end
function [B, C] = MyFunction(A)
global A_orig;
B = A_orig*A;
C = 2*A;
Так, например, myRecursor(eye(2))
дает 1 (дух) и myRecursor([0 1; 1 0])
дает 2.