Save several results from recursive function
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have written some code that that takes a textfile and applies the huffman algorithm and constructs a "Huffman tree" using nested cell arrays.
Basically I have my cell array G which of size 1x2, in turn containing 1x2 cell arrays and so on until it reach the end element which is of class char.
For example G{1}{1}{1}{1}{1}{1} = 'h' which tells me that the codeword for h is 00000 (G{1} is the root).
Now I want to parse my cell array G so I can process the data easier. Basically I want to put my data in another cell array or table like
x y
char1 codeword1
char2 codeword 2
and so on...
For this I have a recursive function
function y = parsecell(c,s)
if nargin==1
s = inputname(1);
end
for i=1:numel(c)
if iscell(c{i}) && ~isempty(c{i})
parsecell(c{i},[s subs(i,size(c))])
else
disp([s(3:end) subs(i,size(c)) ' = ' c{i}])
end
end
end
which gives me outputs like
0 0 0 0 0 = h.
for every end element in G.
I'm struggling with somehow creating my new cell array or table. For example I was thinking that I could replace disp() with something like
y{end+1,1} = [s(3:end) subs(i,size(c)) ' = ' c{i}];
but I can't get it to work.
Any help is appreciated!
2 Kommentare
Walter Roberson
am 30 Apr. 2021
You are passing the numeric value of i as the first parameter of subs() but the first parameter must be a symbolic function or symbolic expression, unless you have a sufficiently old version of MATLAB in which case a character vector was also a possibility.
Akzeptierte Antwort
Stephen23
am 1 Mai 2021
In my experience by far the easiest way to achieve this is to use a nested function, something like (pseudocode):
function out = mymain(s);
out = {};
mynest(s)
function mynest(t)
if whatever checks you want
out{end+1} = whatever
mynest(t(2:end)) % recursive call
end
end
end
Adapt the conditions, recursion, etc. to suit your needs.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!