Save several results from recursive function
10 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2021-4-30
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.
采纳的回答
Stephen23
2021-5-1
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Large Files and Big Data 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!